IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Problème selectOneItem avec un boolean


Sujet :

JSF Java

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 74
    Par défaut Problème selectOneItem avec un boolean
    Encore un problème. Voilà mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur de validation: Valeur not valid.
    Le type boolean n'est-il pas censé avoir un converter par défaut?

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 511
    Par défaut
    Oui y a bien un convertisseur par défaut mais il faut le preciser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <h:selectOneMenu value="#{membreBean.membre.estUnHomme}" converter ="javax.faces.Boolean">
           <f:selectItem itemValue="true" itemLabel="Homme" />
           <f:selectItem itemValue="false" itemLabel="Femme" />
    </h:selectOneMenu>

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 74
    Par défaut
    Hum merci Shivan, mais ça ne fonctionne toujours pas
    J'ai le même problème

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 74
    Par défaut
    Si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:selectBooleanCheckbox value="#{membreBean.membre.estUnHomme}"/>
    La ça fonctionne Mais c'est pas le fonctionnement que je souhaite!

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 511
    Par défaut
    bizarre ça marche chez moi. d'ailleurs pas besoin de converter en faites.

    tu as bien un getter... c'est bien déclaré en boolean ?

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 74
    Par défaut
    Dans membreBean, j'ai
    avec getter et setter

    Dans membre, j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	private boolean estUnHomme;
    avec getter et setter

    Je comprend pas

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 511
    Par défaut
    tu utilise myFaces ou sun ? si tu utilise tomahawk essaye les <t:selectonemenu>

  8. #8
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 74
    Par défaut
    J'utilise l'API de SUN, donc à priori ça devrait passer?

  9. #9
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 74
    Par défaut
    peux-tu poster le code que tu as testé et que tu dis fonctionner?

  10. #10
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 74
    Par défaut
    J'ajouerais une chose étrange : j'ai téléchargé le jar de tomahawk pour tester avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <t:selectOneMenu value="#{membreBean.test}" converter ="javax.faces.Boolean">
           <f:selectItem itemValue="true" itemLabel="Homme" />
           <f:selectItem itemValue="false" itemLabel="Femme" />
    </t:selectOneMenu>
    ...et surprise, la sélection par défaut est bonne! Mais la validation me donne toujours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur de validation: Valeur not valid.
    Je ne veux pas abandonner JSF!! Aidez moi!

  11. #11
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    change private boolean estUnHomme; en private Boolean et ca devrait jouer

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 56
    Par défaut
    bonjour,

    je me permets de remonter ce probleme car c'est exactement le mien (j'utilise myfaces) et en utilisant les solutions décrites je n'ai rien obtenu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		<h:outputText value="etat" />
    		<t:selectOneMenu value="#{BeanClient.client.etat }" id="etat" converter="javax.faces.Boolean">
    			<f:selectItem itemValue="true" itemLabel="actif"/>
    		  	<f:selectItem itemValue="false" itemLabel="passif"/>
    		</t:selectOneMenu>
    etat est bien l'objet Boolean comme proposer (avant j'ai essayé avec le type primitif boolean)

    et j'ai toujours desesperement le meme message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur de Validation "etat": La donnée n'est pas une option valide.
    merci d'avance

    ps : faut il que je rouvre un sujet ?

  13. #13
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 511
    Par défaut
    A priori le converter n'arrive pas à faire la conversion entre String "true" ==> Boolean True.

    Le plus simple serait d'utiliser des strings et de faire la conversion dans le setter (ce n'est pas trés propre je te l'accorde).

    Sinon faudrait jetté un coup d'oeil au code de javax.faces.Boolean, ça doit se trouver sur le svn de myFaces. Ou alors definit ton propre converter pour les Boolean. ça prend 2 min à faire...

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 56
    Par défaut
    donc j'ai fait mon BooleanConverter

    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
    import javax.faces.application.FacesMessage;
    import javax.faces.component.UIComponent;
    import javax.faces.context.FacesContext;
    import javax.faces.convert.Converter;
    import javax.faces.convert.ConverterException;
    public class BooleanConverter implements Converter {
    	public BooleanConverter() {
    	}
    	public String getAsString(FacesContext facesContext, UIComponent uIComponent, Object obj) {
    		if(obj == null) return "false";
    		return obj.toString();
    	}
    	public Object getAsObject(FacesContext facesContext, UIComponent uIComponent, String str) {
     
    		if(str.equalsIgnoreCase("true")){
     
    			return Boolean.TRUE;
    		}
    		else{
     
    			return Boolean.FALSE;
    		}
    	}
    }
    je l'ai déclaré dans le faces config, il passe passe bien dedans mais j'ai toujours la meme erreur

    EDIT : il mets la bonne valeur dans le selectitem mais refuse desesperement d'accepter mon converter

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	<converter>
    		<converter-id>
    		javax.faces.convert.LongConverter</converter-id>
    		<converter-class>
    		javax.faces.convert.LongConverter</converter-class>
    	</converter>

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Par défaut
    Après des tentatives de toutes sortes, même en utilisant une valeur de type String, j'ai toujours le même message "La donnée n'est pas une option valide".

    Par contre, en relisant la doc du composant Tomahawk <t:selectItems>, je viens d'avoir un gros doute : l'objet que l'on indique dans la propriété "value" ('#{medecins}' dans mon cas) doit-il être nécessairement une collection d'objets de type SelectItem, ou est-ce que ce peut être une collection de simples objets métier (comme par exemple une classe "Medecin" qui a les proprietes "id" et "nom") ?

    Je récupère une collection de "Medecin" de la BDD, et mon idée était de l'utiliser directement pour alimenter ma liste déroulante. Mais j'ai un doute sur le fait que ce soit possible. Est-ce qu'il faut à chaque fois créer une collection de SelectItem ?

    Merci d'avance pour vos réponses, c'est très important pour moi !

  17. #17
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Sur les <f:selectItems> de Facelets, il faut effectivement que ce soit une liste de SelectItem.

    Ainsi, au lieu d'écrire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public List<Medecin> getMedecins() {
        return medecins;
    }
    Il te faudra faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public List<SelectItem> getMedecins() {
        List<SelectItem> list = new ArrayList<SelectItem>();
        for (Medecin m : medecins) {
            list.add(new SelectItem(m.getId(), m.getNom()));
        }
        return list;
    }
    A peine plus compliqué
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Par défaut
    Merci pour votre réactivité.
    Je n'utilise pas Facelets, mais seulement Apache MyFaces, et sa librairie Tomahawk.
    Cette réponse est-elle valable également pour Tomahawk ?
    Merci encore !

  19. #19
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Je n'utilise pas les SelectItems de Tomahawk, mais je dirais que le comportement doit être identique en ce qui concerne l'attribut value.
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Par défaut
    OK merci.

    Puis-je vous poser une question : pourquoi l'abandon de Tomahawk au profit de Facelets ?
    Je ne connais pas Facelets, juste de nom. Qu'est-ce que ça apporte de mieux ? Est-ce long ou compliqué à prendre en main (en particulier quand on débute sous JSF) ?

Discussions similaires

  1. Problème Locate avec espaces
    Par Clezio dans le forum Bases de données
    Réponses: 2
    Dernier message: 10/03/2004, 19h06
  2. Problème mémoire avec une dll par chargement dynamique
    Par widze19 dans le forum C++Builder
    Réponses: 6
    Dernier message: 15/12/2003, 13h20
  3. problèmes bizarres avec jdbc
    Par jaimepasteevy dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 12/12/2003, 12h00
  4. Problème requête avec UNION et ORDER BY
    Par Yann21 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 12/12/2003, 11h02
  5. problème JSP avec JBuilder et Weblogic 7
    Par viny dans le forum JBuilder
    Réponses: 2
    Dernier message: 24/04/2003, 08h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo