Bonjour,
Je souhaite mettre a jour certaine propriétés de composants JSF dans mon formulaire à l'aide d'un bean en me basant sur leur ID.
Par exemple pour un commandButton mettre a jour la valeur et l'action.
Quand je n'ai qu'un seul composant sur ma page, je peux utiliser binding comme ceci
avec dans mon bean:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <h:commandButton binding="#{interfaceInt.compID}" id="c0101" type="submit" value="#{interfaceInt.label}" action="#{interfaceInt.doNavigation()}"/>
Par contre dès que j'ai plus d'un composant à modifier, le binding n'est plus utilisable.
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 private UIComponent pcomp; public void setCompID(UIComponent comp) { pcomp=comp; } public UIComponent getCompID() { return pcomp; } public String getLabel() { String label="DEFAULT"; String compID=pcomp.getId().toUpperCase(); if (compID.equals("C0101")) { label="DYN COMMAND0101"; } return label; } public String doNavigation() { String navig="errorpage"; String compID=pcomp.getId().toUpperCase(); if (compID.equals("C0101")) { navig="index2"; } return navig; }
J'ai tenté de récuperer directement le UIComponent dans le "setter" comme ceci:
et dans ma page jsp:
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 public String setLabel(UIComponent comp) { String label="DEFAULT"; String compID=comp.getId().toUpperCase(); if (compID.equals("C0201")) { label="DYN COMMAND0201"; } return label; } public UIComponent getLabel() { return null; } public String setNavigation(UIComponent comp) { String navig="errorpage"; String compID=comp.getId().toUpperCase(); if (compID.equals("C0201")) { navig="index3"; } return navig; } public UIComponent getNavigation() { return null; }
J'ai déja un warning dans l'éditeur netbeans de mon formulaire comme quoi les propriétés setLabel et setNavigation n'existent pas, ce que je comprend intuitivement puisque les methodes du bean attendent un UIComponent comme parametre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <h:commandButton id="c0201" type="submit" value="#{interfaceInt1.setLabel}" action="#{interfaceInt1.setNavigation()}"/>
et si je remplace setLabel et setNavigation par les acces "habituels" aux propriétés du bean
j'obtient un bouton vide (sans label et sans action).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <h:commandButton id="c0201" type="submit" value="#{interfaceInt1.label}" action="#{interfaceInt1.navigation}"/>
Est ce qu'il est possible (et comment) de "passer" au bean la référence au composant qui appelle la méthode?
Merci d'avance pour votre aide.
Partager