2010-10-13 6 views
3

J'ai un problème que je ne suis pas en mesure de résoudre. Eh bien, supposons que nous invoquons une méthode (dans un bean backing) d'une page Web (peut-être jsp, xhtml, portlet ...) en appuyant sur un bouton.Comment accéder aux données de formulaire après l'envoi

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

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

La forme est présentée avec ses valeurs.

Supposons aussi que nous aurons un problème (Exception) pendant le processus d'action.

j'ai écrit (et enregistré) un ActionListener qui va attraper l'exception non gérée (et qui fera quelque chose à gérer):

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(); 
} 
} 
} 

Il fonctionne très bien ... Mais ... je dois savoir les données qui sont (étaient?) dans le formulaire soumis.

Comment puis-je obtenir cette information? Je voudrais une méthode générique, car l'erreur peut arriver partout dans l'application (je ne connais pas vraiment le clientId ou d'autres informations particulières sur les objets).

Il est également possible d'obtenir TOUTES les données publiées et de les écrire dans la base de données: j'analyserai les données plus tard !!

Malheureusement, nous sommes toujours à JSF 1.2.

Des idées?

Merci beaucoup! Tommaso

Répondre

5

Donc, vous voulez obtenir tous les paramètres de demande?

Dans un haricot, vous pouvez faire comme suit:

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

Dans la vue (en supposant JSP), vous pouvez faire comme suit:

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

Le ${paramValues} se réfère implicitement à HttpServletRequest#getParameterMap() qui renvoie une Map<String, String[]> .

Questions connexes