Bonjour à tous,
J'ai un problème avec 2 éléments selectOneMenu dépendants l'un de l'autre.
J'ai vu qu'un autre utilisateur avait eu le même genre de souci il y a quelques temps (5-6 discussions en dessous) mais je n'arrive pas à solutionner mon pb comme il a pu le faire.
Voilà mes 2 éléments (il se trouvent dans un table) :
Mon premier select "ajListe" contient des Long comme valeurs et des String en labels.
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 <html:form> <tr> <td class="adminLDTdRight"><html:outputText value="#{admin.liste}" /></td> <td colspan="2" class="adminLDTdLeft"> <html:selectOneMenu id="ajListe" value="#{adminLDBean.listDynSelectionnee.id}" styleClass="adminLDSelect" onchange="submit();" valueChangeListener="#{adminLDBean.changerLD}"> <core:selectItems value="#{adminLDBean.listeLD}" /> </html:selectOneMenu></td> <td></td> </tr> <tr> <td class="adminLDTdRight"><html:outputText value="#{admin.objet}" /></td> <td colspan="2" class="adminLDTdLeft"> <html:selectOneMenu id="ajObjet" value="#{adminLDBean.ajObjet}" styleClass="adminLDSelect"> <core:selectItems value="#{adminLDBean.listeObjets}" /> </html:selectOneMenu></td> <td></td> </tr> </html:form>
Au changement de sélection la méthode changerLD() de mon bean est appelée.
Voilà le code dans mon bean :
Peu importe ce qu'il se passe au début de la fonction, le plus intéressant est à la fin où j'initialise la variable ajObjet avec la valeur que je souhaite sélectionner dans ma deuxième liste.
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 public void changerLD(ValueChangeEvent e) { Long value = (Long) e.getNewValue(); if(value.longValue() == AdminLDBean.NOUVELLE_VALUE.longValue()) { listDynSelectionnee = ListDyn.creerListDyn("", ""); } else { for(ListDyn ld : lds) { if(ld.getId().longValue() == value.longValue()) { listDynSelectionnee = ld; ajObjet = ld.getType(); } } } }
Si je met une trace au dessous de "ajObjet = ld.getType();" ma variable est bien initialisée.
Le problème c'est qu'elle n'est pas sélectionnée dans ma page après le refresh.
J'ai mis une trace dans la fonction getAjObjet(), celle qui est appelée dans le deuxième Select pour sélectionner la valeur, et bien je n'ai pas ma valeur initialisée via changerLD() mais plutôt celle qui était sélectionnée avant le Refresh.
Je suis débutant en JSF, il doit y avoir une notion qui méchappe.
Je ne vois pas pourquoi l'initialisation de la variable se fait bien au moment de l'appel de la fonction onchange() mais qu'elle n'est pas récupérée par la suite après le submit sur la page.
Merci d'avance !
Si je ne suis pas assez explicite dans ma description, n'hésitez pas !
Partager