Bonjour,
je suis en train de développer une petite appli web (JSF 1.2 myFaces) et je rencontre des problèmes avec l'utilisation de l'attribut "immediate".
En effet, mon but est de générer une listBox sur base de la sélection d'une précédante listBox mais voià à chaque fois que je change de valeur dans la 1ere, il soumet tout le formulaire comme si j'avais cliquer sur le bouton du form (donc avec toute la validation etc...)
Voici les différentes partie de code:
côté formulaire
et du côté serverur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <h:form enctype="multipart/form-data"> <h:outputLabel for="codeLieuID" value="#{msgs.insert_insert_a_postal_code}"/> <h:selectOneMenu id="codeLieuID" immediate="true" onchange="submit()" value="#{insertBean.codeLieu}" valueChangeListener="#{insertBean.placeChanged}" > <f:selectItems value="#{insertBean.codesLieuxMain}"/> </h:selectOneMenu> <h:outputLabel for="codeLieuSID" value="Select your town"/> <h:selectOneMenu id="codeLieuSID" value="#{insertBean.codeLieuSecondary}" > <f:selectItems value="#{insertBean.codesLieuxSecondary}"/> </h:selectOneMenu> <h:form>
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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 public class InsertBean { private List<SelectItem> codesLieuxMain = new ArrayList<SelectItem>(); private List<SelectItem> codesLieuxSecondary = new ArrayList<SelectItem>(); public List<SelectItem> getCodesLieuxMain() { List<PlaceCode> tmpList = placeCodeService.findAllFromSameLevel(1); codesLieuxMain = new ArrayList<SelectItem>(); for (PlaceCode pc : tmpList) { codesLieuxMain.add(new SelectItem(""+pc.getNumber().intValue(), pc.getName())); } return codesLieuxMain; } public void setCodesLieuxMain(List<SelectItem> codesLieuxMain) { this.codesLieuxMain = codesLieuxMain; } public void placeChanged(ValueChangeEvent evt) { codesLieuxSecondary.clear(); int value = (Integer) evt.getNewValue(); List<PlaceCode> codes = placeCodeService.retrieveListFromNode(value); for (PlaceCode pc : codes) { codesLieuxSecondary.add(new SelectItem(""+pc.getNumber().intValue(), pc.getName())); } } public List<SelectItem> getCodesLieuxSecondary() { return codesLieuxSecondary; } public void setCodesLieuxSecondary(List<SelectItem> codesLieuxSecondary) { this.codesLieuxSecondary = codesLieuxSecondary; } }
Si quelqu'un comprend pourquoi la validation se fait complètement au lieu de passer dans mon listener, je suis preneur
bien à vous et bonne journée.
Olivier
Partager