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
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()}"/>
avec dans mon bean:

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;
    }
Par contre dès que j'ai plus d'un composant à modifier, le binding n'est plus utilisable.

J'ai tenté de récuperer directement le UIComponent dans le "setter" comme ceci:
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;    
    }
et dans ma page jsp:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
<h:commandButton id="c0201" type="submit" value="#{interfaceInt1.setLabel}" action="#{interfaceInt1.setNavigation()}"/>
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.

et si je remplace setLabel et setNavigation par les acces "habituels" aux propriétés du bean

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
<h:commandButton id="c0201" type="submit" value="#{interfaceInt1.label}" action="#{interfaceInt1.navigation}"/>
j'obtient un bouton vide (sans label et sans action).

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.