[JSF] UISelectMany getSelectedValues toujours NULL
Bonjour, je rencontre un problème dans la tentative de faire des onglets dynamiques en JSF.
L'idée est la suivante:
je récupère une liste, et pour chaque item je crée un onglet avec dans cet onglet une liste de SelectItem. Je fais cela dans un backing bean lié à ma page JSP.
L'aspect graphique fonctionne, mais je n'arrive pas à récupérer les valeurs saisies par l'utilisateur.
Je voudrais avoir un code Java qui fait la même chose que cette JSP:
Code:
1 2 3 4 5 6 7 8 9
|
<rich:tabPanel id="tabPanel">
<rich:panel>
<h:selectManyListbox id="selecVariables"
value="#list[i]}">
<f:selectItems value="#{...}" />
</h:selectManyListbox>
</rich:panel>
</rich:tabPanel> |
où list[i] serait les valeurs sélectionnées par l'utilisateur.
Je sais que ce code ne marcherait pas tel quel, mais je pense que c'est assez clair.
Voilà la partie de ma page JSP:
Code:
1 2
|
<rich:tabPanel id="tabPanel" switchType="client" binding="#{dataBase.mytabPanel}" /> |
Voilà maintenant comment est codé mon bean:
- la méthode qui lie les composants
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
| /**
* The getter of HTMLTabPanel
* @return HTMLTabPanel
*/
public HtmlTabPanel getMytabPanel() {
List<List<UISelectItem>> selectItemTab=SelectItemConverter.listMapToUISelectItems(dataBase.getListVarContent(chosenVariablesNames));
/**create a tabPanel*/
FacesContext context = FacesContext.getCurrentInstance();
Application application = context.getApplication();
mytabPanel = (HtmlTabPanel)application.createComponent(HtmlTabPanel.COMPONENT_TYPE);
/**for each entry in the displayContentList, create a tab*/
for (int i=0; i<selectItemTab.size();i++){
HtmlTab tab = (HtmlTab)application.createComponent(HtmlTab.COMPONENT_TYPE);
tab.setLabel("Variable: " + variableNames[i]);
/**the selectManyItems*/
selectMany=new UISelectMany();
selectMany.setId("sel"+i);
selectMany.setSelectedValues(listSelContMatrix[i]);
selectMany.setValid(true);
selectMany.getChildren().addAll(selectItemTab.get(i));
tab.getChildren().add(selectMany);
mytabPanel.getChildren().add(tab);
}
return mytabPanel;
} |
- et la méthode que j'appelle lors du click sur le bouton de ma JSP:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
public String validateContent(){
/**dataBase.writeInUserLog();*/
for (int i=0; i<listSelContMatrix[0].length; i++){
if (listSelContMatrix[0][i]!=null) System.out.println("selected: " + listSelContMatrix[0][i]);
}
for (int i=0; i<selectMany.getSelectedValues().length; i++){
if (selectMany.getSelectedValues()[i]!=null) System.out.println("selected1: " + selectMany.getSelectedValues()[i]);
}
if (selectMany.getSubmittedValue()!=null) System.out.println("selected2: " + selectMany.getSubmittedValue().toString());
return OUTCOME_CONTENT;
} |
Comme vous pouvez le voir, j'ai essayé un peu toutes les méthodes de récupération des données, mais rien à faire, les listes ne sont pas NULL mais tous leurs items sont NULL.
Si quelqu'un pouvait m'éclairer, ce serait très sympathique.
Merci!