Bonjour,
J'ai formulaire de saisie d'une identité.
Cette identité est rattachée à un objet "Pays", sélectionnable avec un composant autocomplete.
Suivant le pays sélectionné, j'aimerais afficher différents champs de saisie.
En fait, si l'utilisateur sélectionne "Suisse", j'aimerais afficher un autre champ autocomplete pour sélectionner une localité enregistrée dans le système.
Si l'utilisateur choisi tout autre pays, j'aimerais afficher un inputText pour qu'il puisse saisir à la main le nom de la localité.
Le tout dynamiquement bien sûr, à chaque changement de pays il faut réafficher le bon champ de saisie de la localité.
Pour cela, j'avais fais ceci :
Le problème est que mon converter pète ici car la valeur n'est pas un Integer mais un String :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <p:autoComplete id="pays" onchange="submit();" value="#{saisirIdentiteForm.pays}" completeMethod="#{saisirIdentiteForm.completePays}" var="pays" itemLabel="#{pays}" itemValue="#{pays.id}" converter="PaysConverter" forceSelection="true" size="25" />
Si j'enlève
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public Object getAsObject(FacesContext context, UIComponent component, String value) { if (value != null) { PaysManagedBean paysMB = context.getApplication() .evaluateExpressionGet(context, "#{paysManagedBean}", PaysManagedBean.class); return paysMB.getMapPays().get(Integer.valueOf(value)); } return null; }du champ autocomplete, ça passe tout bien. Le problème est que mon formulaire ne se met pas à jour et j'ai toujours le même champ de sélection de localité.
Code : Sélectionner tout - Visualiser dans une fenêtre à part onchange="submit();"
Je comprends bien que le problème vient de "onChange" qui envoie la valeur de ce que je saisis avant d'avoir sélectionné le Pays et du coup n'envoie pasmais ce qui est saisi dans le champ (par ex: "Fra"). Mais onComplete n'est pas disponible pour le champ autocomplete....
Code : Sélectionner tout - Visualiser dans une fenêtre à part itemValue="#{pays.id}"
J'ai aussi essayer avec un selectOneMenu :
Mais j'obtiens l'erreur de validation suivante (je ne vois vraiment pas pourquoi):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <p:selectOneMenu id="pays" value="#{saisirMandatForm.pays}" converter="PaysConverter" style="width:200px" onchange="submit();"> <f:selectItems value="#{saisirMandatForm.listPays}" var="pays" itemLabel="#{pays.nom}" itemValue="#{pays.id}" /> </p:selectOneMenu>
Qqun a-t-il une solution pour régler ce problème ?saisirMandatForm:pays : erreur de validation. La valeur est incorrecte.
Merci pour votre aide
Partager