Bonjour,
Je développe une application avec les JSF sous Eclipse et JBoss.
J'ai un problème récurrent depuis le début que je n'arrive pas à résoudre.
Lorsque je définis dans le même formulaire une action associée à un commandButton et un ValueChangeListener à un menu déroulant , le premier clic sur mon bouton appelle la fonction du menu déroulant et non pas de mon bouton.
A noter qu'il s'agit de bean session.
Voici un exemple de code qui génére ce problème, mon formulaire est un élément HtmlPanelGrid inclus dans une balise <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 HtmlCommandButton enregistrer = (HtmlCommandButton) application.createComponent("javax.faces.HtmlCommandButton"); enregistrer.setValue("Enregistrer"); enregistrer.setId("enregistrer"); MethodBinding onEnregistrer=application.createMethodBinding("#{AccueilMessage.onEnregistrer}",null); enregistrer.setAction(onEnregistrer); formulaire.getChildren().add(enregistrer); [...] HtmlSelectOneMenu contenuFormulaire=(HtmlSelectOneMenu) application.createComponent("javax.faces.HtmlSelectOneMenu"); contenuFormulaire.setId("contenu"); MethodBinding valueContenuConteneurChange=application.createMethodBinding("#{AccueilMessage.valueContenuConteneurChange}",new Class[]{ValueChangeEvent.class}); contenuFormulaire.setValueChangeListener(valueContenuConteneurChange); UISelectItem multiple = (UISelectItem) application.createComponent(UISelectItem.COMPONENT_TYPE); multiple.setItemValue("multiple"); multiple.setItemLabel("multiple"); contenuFormulaire.getChildren().add(multiple); [...] contenuFormulaire.setOnchange("submit()"); contenuFormulaire.setImmediate(true); formulaire.getChildren().add(contenuFormulaire);
Donc dans mon exemple lors de la validation de mon formulaire avec le bouton enregistrer, c'est la fonction valueContenuConteneurChange qui est appelée et non pas la focntion onEnregistrer comme je le souhaite
Merci de votre aide
Partager