Bonjour,
Je suis nouveau sous JSF, et je pense ne pas avoir parfaitement assimilé les concepts de cycle de vie.
Je tente de faire une opération assez simple:
Dans une 1ere page, j'ai un richTree (ou une dataTable, le comportement est identique) contenant des objets ayant un identifiant.
Le tree est inclus dans le bean de la page qui contient en plus un champ selectedID. L'idée est que lorsque l'on clique sur un élément du tree, cela mette à jour le selectedID avec l'identifiant de l'objet cliqué, puis lance une nouvelle fenêtre de détails.
Voici le code de la première page:
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <h:form id="monForm"> <h:inputHidden value="#{monBean.selectedID}" id="selectedID" /> <rich:tree value="#{monBean.monBeanTree}" switchType="client"var="maNode" > <rich:treeNode icon="monFolder.gif" iconLeaf="monFolder.gif" > <h:commandLink id="maNodeLink" action="#{monBean.showDetail}" target="_new"> <a4j:actionparam name="identifiantMAJ" value="#{maNode.identifiant}" assignTo="#{monBean.selectedID}" /> <h:outputLabel value="#{maNode.identifiant}" styleClass="link"></h:outputLabel> </h:commandLink> </rich:treeNode> </rich:tree>
De la fiche de détails (qui pour l'instant ne montre que l'identifiant):
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2<h:outputText id="value_id" value="#{monBean.selectedID}"/>
Et le showDetail du Bean:
Mon problème: la fiche de détails est vide si monBean est un bean de request. La page affichera les bonnes informations si il est un bean de session.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public String showDetail(){ if(selectedID!=null){ return "consult"; } return "error"; }
Dans le cas d'un scope de request, au debuggueur j'observe (après avoir cliqué sur le lien du node) qu'un premier setSelectedID() est fait avec null; puis un deuxième avec la bonne valeur; puis on passe dans showDetail(), puis *pouf* plus rien dans le bean: selectedID est à nouveau null.
Je suppose qu'il y a une phase de re-post qui n'est pas faite correctement, pourriez vous éclairer ma lanterne?
Aurait-il mieux valut utiliser des actionListener?
Question subsidiaire: pourquoi un c:if est incapable de lire #{maNode.identifiant} ?
Partager