Bonjour,
Voilà mon soucis :
J'affiche un tableau avec des lignes de données et lorsque l'utilisateur clique sur une icone appartenant à cette liste ("modifier" par exemple) j'affiche un modalPanel avec les champs à modifier.
Pour l'instant j'arrive à afficher mon modal Panel et à récupérer les données de la ligne sélectionnée mais dans ma méthode seulement. Dans mon modalPanel, les données sont celles qui ont été instanciées à l'ouverture de la page et ces données ne se mettent pas à jour mais pour le modalPanel uniquement !!
Voici le code de ma page JSF :
Et le code de ma méthode recupereLigneTable :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 <h:form> <rich:scrollableDataTable id="tableGestionnaire"rowKeyVar="rkv" width="800" columnClasses="col" rows="10" value="#{administrationController.listeGestionnaires}" var="gestionnaire" sortMode="single"> <rich:column id="Uid" width="150"> <f:facet name="header"><h:outputText value="UID" /></f:facet> <h:outputText value="#{gestionnaire.uId}" /> </rich:column> <rich:column id="Prenom" width="200"> <f:facet name="header"><h:outputText value="Prénom" /></f:facet> <h:outputText value="#{gestionnaire.prenom}" /> </rich:column> <rich:column id="Edit" width="50"> <f:facet name="header"><rich:toolTip value="Modifier" showDelay="1000" style="background-color: #FFF"/></f:facet> <center><a4j:commandLink actionListener="#{administrationController.recupereLigneTable}" immediate="true" oncomplete="#{rich:component('panelEditionGestionnaire')}.show()"><img src="../IMG/edit.png" border="0"/></a4j:commandLink></center> </rich:column> </rich:scrollableDataTable> </h:form> <h:form id="formEditionGestionnaire"> <rich:modalPanel id="panelEditionGestionnaire"> <f:facet name="header"> <h:outputText value="Modifier un gestionnaire" /> </f:facet> <f:facet name="controls"> <h:graphicImage value="../IMG/close.png" style="cursor:pointer" onclick="#{rich:component('panelEditionGestionnaire')}.hide()" /> </f:facet> <table> <tr> <td> <h:outputText value='Login : '/><h:inputText value="#{administrationController.gestionnaire.uId}"></h:inputText> </td> </tr> <tr> <td> <h:outputText value='Prénom : '></h:outputText><h:inputText id='Prenom' value="#{administrationController.gestionnaire.prenom}"></h:inputText> </td> </tr> <tr> <td> <h:commandButton id="validate" value="Valider"></h:commandButton> </td> </tr> </table> <h:messages/> </rich:modalPanel> </h:form>
Chaque fois que le modalPanel s'affiche cette méthode est bien appelée et mon gestionnaire prend les bonnes valeurs. Par contre dans le modalPanel, le gestionnaire est null (valeur par défaut).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public void recupereLigneTable(ActionEvent arg0) throws AbortProcessingException { UIComponent component = FacesContext.getCurrentInstance().getViewRoot().findComponent("administrationGestionnaire:tableGestionnaire"); UIData dataTable = (UIData)component; //Object correspondant à la ligne cliquée gestionnaire = (Gestionnaire)dataTable.getRowData(); System.out.println("recupèreLigneTable : Gestionnaire UID : " + gestionnaire.getuId() + " " + gestionnaire.getPrenom()); }
Par contre si je sélectionne une ligne, que je quitte la page et que j'y reviens, le gestionnaire prend la valeur de la ligne sélectionnée quand je réouvre un modalPanel mais n'en change pas si je clique sur une autre ligne (alors que la méthode elle est bien appelée à chaque fois).
Je ne comprends pas du tout ce comportement. Quelqu'un pour m'éclairer ?
Partager