Problème selectOneItem avec un boolean
Encore un problème. Voilà mon code :
Code:
1 2 3 4 5
|
<h:selectOneMenu value="#{membreBean.membre.estUnHomme}">
<f:selectItem itemValue="true" itemLabel="Homme" />
<f:selectItem itemValue="false" itemLabel="Femme" />
</h:selectOneMenu> |
L'attribut estUnHomme est un boolean.
Lors de l'affichage, la valeur par défaut n'est pas la bonne.
Mais surtout, à la validation de mon formulaire, j'ai
Code:
Erreur de validation: Valeur not valid.
Le type boolean n'est-il pas censé avoir un converter par défaut?
Erreur de validation selectOneMenu de type Long
Bonjour,
J'ai le même problème que celui évoqué dans ce post, mais avec un type Long au lieu de Boolean (je travaille avec Tomahawk).
J'ai essayé d'ajouter le convertisseur LongConverter, mais ça n'y change rien.
Avez-vous résolu votre problème avec le type Boolean ?
Merci d'avance.
(Je précise que je débute depuis peu avec JSF, donc n'hésitez pas à apporter des conseils sur des points "évidents").
Message d'erreur de validation : "La donnée n'est pas une option valide."
Dans la JSP :
Code:
1 2 3 4 5
|
<t:selectOneMenu id="medecin" value="#{rechercheRdvParCriteresForm.idMedecin}" converter="javax.faces.convert.LongConverter">
<f:selectItem itemValue="-1" itemLabel="#{msgG.Indifferent}"/>
<t:selectItems value="#{medecins}" var="med" itemValue="#{med.id}" itemLabel="#{med.nom} #{med.prenom}"/>
</t:selectOneMenu> |
Dans mon bean rechercheRdvParCriteresForm :
Code:
1 2 3 4 5 6 7 8 9 10
|
private Long idMedecin = new Long(-1);
public Long getIdMedecin() {
return idMedecin;
}
public void setIdMedecin(Long idMedecin) {
this.idMedecin = idMedecin;
} |
Dans faces-config.xml :
Code:
1 2 3 4 5 6
| <converter>
<converter-id>
javax.faces.convert.LongConverter</converter-id>
<converter-class>
javax.faces.convert.LongConverter</converter-class>
</converter> |
Récupération d'un message depuis un ManagedBean
Pour ceux qui seraient amenés à se casser la tête comme moi, pour trouver une information si simple, j'ai trouvé la réponse à ma question : Comment récupérer, depuis un ManagedBean, un message stocké dans un fichier Bundle.
Il faut tout simplement utiliser la classe org.apache.myfaces.shared_impl.util.MessageUtils (encore fallait-il savoir qu'elle existait).
Exemple :
Code:
1 2 3
|
FacesMessage monMessage = MessageUtils.getMessage("monRepertoire.monFichierBundle", "MA_CLEF",
new String[]{"1er parametre","2e parametre"}); |
et dans /monRepertoire/monFichierBundle.properties, j'ai :
Code:
1 2
| MA_CLEF=Ce qui correspondra au summary du FacesMessage. On peut y mettre des parametres comme ceci {0} ou cela {1}.
MA_CLEF_detail=Ce qui correspondra au detail du FacesMessage. |
Pour ce qui est de mon autre interrogation du précédent post, j'ai finalement stocké mes ManagedBean en scope Session. Du coup, maintenant, je ne sais pas très bien comment gérer la réinitialisation de ces beans, une fois que j'ai fini d'utiliser un formulaire, en vue de le réutiliser plus tard. En effet, si je ne réinitialise pas les champs des mes beans, lorsque je reviens sur le même formulaire un peu plus tard, les champs sont déjà renseignés (logique).