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 : 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
 
<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 : 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
 
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...