Comment récupérer l'ID d'un composant dans un bean
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:
1 2
|
<h:commandButton binding="#{interfaceInt.compID}" id="c0101" type="submit" value="#{interfaceInt.label}" action="#{interfaceInt.doNavigation()}"/> |
avec dans mon bean:
Code:
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:
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:
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:
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.