Datatable JSF et SelectOneMenu Dépendants
Bonjour,
Je souhaiterai réaliser une datatable contenant 3 colonne
Une colonne de texte
Une colonne avec une liste de catégorie (SelectOneMenu)
Une colonne avec une liste de sous catégorie
Une catégorie contient 0..n sous catégories
Évidement, chaque catégorie ne contient pas les même sous catégories.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
<rich:column>
<f:facet name="header">Aide</f:facet>
<h:outputText value="#{typeAideFin.libelle}"></h:outputText>
</rich:column>
<rich:column>
<f:facet name="header">Catégorie</f:facet>
<h:selectOneMenu id="comboCateg" value="#{typeAideFin.sousCategorie.categorie.code}" valueChangeListener="#{controller.updateListeSousCateg}">
<f:selectItems value="#{controller.listeCategorieUI}"></f:selectItems>
<a4j:support event="onchange" reRender="sousCateg">
</a4j:support>
</h:selectOneMenu>
</rich:column>
<rich:column id="sousCateg">
<f:facet name="header">Sous-Catégorie</f:facet>
<h:selectOneMenu value="#{typeAideFin.sousCategorie.code}" id="comboSousCateg" valueChangeListener="#{controller.updateSousCateg}">
<f:selectItems id="listeSousCategorieUI" value="#{controller.listeSousCategorieUI}"></f:selectItems>
<a4j:support event="onchange">
</a4j:support>
</h:selectOneMenu>
</rich:column> |
Puis
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
private ArrayList<SelectItem> listeCategorieUI;
private ArrayList<SelectItem> listeSousCategorieUI;
...
...
public void updateListeSousCateg(ValueChangeEvent evt){
System.out.println("Mise à jour");
//Remplissage de la liste des sous catégories
this.listeSousCategorieUI.clear();
//On rajoute quand même une possibilité de sélectionner l'option aucun
this.listeSousCategorieUI.add(new SelectItem(-1, "Aucun"));
for (SousCategorie sousCateg : this.service.getAllSousCategorieByCategorie(evt.getNewValue().toString())){
this.listeSousCategorieUI.add(new SelectItem(sousCateg.getCode(), sousCateg.getLibelle()));
}
} |
Comment peut-on faire pour initialiser tout ça ? je tourne en rond depuis trois jours...