2010-10-13 7 views
3

У меня есть проблема, которую я не могу решить.Как получить данные формы после отправки

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

<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.

Любые идеи?

Большое спасибо! Tommaso

ответ

5

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

В бобе вы можете сделать, как следует:

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[]> ,

Смежные вопросы