J'ai une application JSF qui se compose de deux JSP: login.jsp & main.jsp.JSF commandeLink action tir avant la mise à jour des valeurs de modèle
J'ai les suivantes faces-config.xml:
<lifecycle>
<phase-listener>package.programs.scorecard.beans.EventBean</phase-listener>
</lifecycle>
<managed-bean>
<managed-bean-name>FormBean</managed-bean-name>
<managed-bean-class>package.programs.scorecard.beans.FormBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>DataBean</managed-bean-name>
<managed-bean-class>package.programs.scorecard.beans.DataBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>EventBean</managed-bean-name>
<managed-bean-class>package.programs.scorecard.beans.EventBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
Et le web.xml suivant:
<welcome-file-list>
<welcome-file>faces/login.jsp</welcome-file>
<welcome-file>faces/index.jsp</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
J'ai deux ou trois composants sur Login.jsp que les propriétés de mise à jour à Databean sur un lien commandLink. En cas de réussite, l'utilisateur est dirigé vers /main.jsp.
Je remarque que lorsque je clique sur le lienCommande, la méthode s'exécute AVANT que le bean ne soit mis à jour. Cela a pour résultat que toutes mes propriétés de bean sont nulles lorsque la méthode s'exécute car les valeurs de mon formulaire ne sont pas appliquées au bean. D'après ce que j'ai compris du cycle de vie JSF, les «Valeurs du modèle de mise à jour» doivent toujours être exécutées avant «Invoke Application», sauf si «immediate = true» est spécifié, ce qui n'est pas le cas pour ma commande commandLink.
J'ai essayé de déboguer cela pendant quelques heures ce matin, et je me réjouis de toutes suggestions ou idées.
MISE À JOUR: J'ai étudié cette question à fond et ont conclu que le menu déroulant composante I utilisait a un bogue qui devrait être fixé dans la prochaine version. Ma solution a été d'utiliser un h normal: selectOneMenu au lieu du composant tiers, et cela fonctionne comme un charme:
<h:selectOneMenu id="ddlManager" value="#{DataBean.managerId}">
<f:selectItems value="#{DataBean.managerList}" />
</h:selectOneMenu>
Où managerList est une liste d'objets selectItem.
Pourriez-vous fournir un peu plus d'explications. Voulez-vous dire que la méthode pagecode pour le lien de commande est en cours d'exécution avant que votre phaselistener ne soit appelé? Avez-vous une logique quelconque dans votre phaselistener qui pourrait l'empêcher d'être appelé? – BoboTheCodeMonkey