Как получить доступ к данным формы после отправки - PullRequest
3 голосов
/ 13 октября 2010

У меня есть проблема, которую я не могу решить.

Хорошо, давайте предположим, что мы вызываем метод (в компоненте поддержки) с веб-страницы (возможно, jsp, xhtml, portlet ...)) нажатие кнопки.

<h:form>
....
<h:inputText value="#{errorManager.errorTestDataBean.errore00}" />

<h:commandButton id="go" value="GO" action="#{errorManager.triggerError}" />
...
</h:form>

Форма отправляется со своими значениями.

Предположим также, что мы получим проблему (исключение) в процессе действия.

Я написал (и зарегистрировал) ActionListener, который будет перехватывать необработанное исключение (и будет что-то делать для его обработки):

public class ExceptionHandlingActionListener extends ActionListenerImpl
{

public void processAction(ActionEvent event)
{
try
{
super.processAction(event); //+THE ERROR HAPPENS IN THE SUPER CLASS+ 
}
catch(Exception exception)
{
exception.printStackTrace();
......... do something here ...............

FacesContext facesContext = FacesContext.getCurrentInstance();
Application application = facesContext.getApplication();
NavigationHandler navigationHandler = application.getNavigationHandler();
navigationHandler.handleNavigation(facesContext, null, "error"); /* FORWARD TO AN ERROR PAGE */
facesContext.renderResponse();
}
}
}

Это прекрасно работает ... НО ... Мне нужно знать данныекоторые находятся (были?) в отправленной форме.

Как я могу получить эту информацию?Я хотел бы использовать универсальный метод, поскольку ошибка может возникать повсюду в приложении (я действительно не знаю clientId или другую специфическую информацию об объектах).

Также можно получить ВСЕ опубликованные данные и записать ихв базе данных: я проанализирую данные позже !!

К сожалению, мы все еще на JSF 1.2.

Есть идеи?

Большое спасибо!Томмазо

1 Ответ

5 голосов
/ 13 октября 2010

Итак, вы хотите получить все параметры запроса?

В bean-компоненте вы можете сделать следующее:

ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
Map<String, String[]> paramValues = ec.getRequestParameterValuesMap();

В представлении (при условии JSP) вы можете сделать следующее:

<ul>
    <c:forEach items="${paramValues}" var="entry">
        <li>${entry.key}:
            <c:forEach items="${entry.value}" var="value" varStatus="loop">
                ${value}${!loop.last ? ', ' : ''}
            </c:forEach>
        </li>
    </c:forEach>
</ul>

${paramValues} неявно ссылается на HttpServletRequest#getParameterMap(), который возвращает Map<String, String[]>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...