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 :

[RichFaces] Selected item de ComboBox


Sujet :

JSF Java

  1. #1
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 21
    Par défaut [RichFaces] Selected item de ComboBox
    Bonjour les membres

    j'ai un petit souci avec mon ComboBox:
    je récupère ma liste d'objets à partir de la base de données et je l'injecte en utilisant SelectItem:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    List<SelectItem> SourceAnouncement=new ArrayList();
    ...
    SourceAnnonce source=(SourceAnnonce)iter.next();
    SourceAnouncement.add(new SelectItem(source));
    Le probleme est que j'arrive pas à mapper l'objet selectionné dans mon managedBean:Si je fais le mapping sur l'objet "SourceAnnonce" ou meme un mapping sur un SelectItem, rien ne se passe. Seulement un mapping String fonctionne grace à la méthode toString() dans ma classe "SourceAnnonce".

    y'a til un moyen pour récuperer mon objet et en particulier son ID qui sera mon itemValue ???? (le itemLabel est le champ description de mon objet)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <rich:comboBox selectFirstOnUpdate="false" defaultLabel="choisir l'origine de l'annonce" 
    				   value="#{announcementBean.sourceName}">
    					<f:selectItems value="#{announcementBean.sourceItems}"/>
    			    </rich:comboBox>
    thinks

  2. #2
    Membre confirmé Avatar de nighthammer
    Profil pro
    Développeur Java
    Inscrit en
    Juillet 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2005
    Messages : 122
    Par défaut
    Ton objet n'est peut être pas sérialisable (c'est à dire qu'il ne peut pas être stocké dans ta page sous forme d'une chaine de caractère).

    Deux possibilités, soit tu fais hériter toutes ta classe et ses sous classes de Serializable. Soit tu crée un Converter qui sera utilisé par jsf avec deux fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public String getAsString(final FacesContext ctx, final UIComponent comp, final Object taureau)
    qui permet de transformer ton objet en une chaine de caractère

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public Object getAsObject(final FacesContext ctx, final UIComponent comp, final String pId)
    qui permet de récupérer un objet à partir d'une chaine de caractère

    La première solution est plus simple mais certaines fois, on a pas le choix d'utiliser la deuxième.

    Pour le dexième cas, il faut que tu déclare le lien entre l'objet à convertir et son converter dans le faces-config

  3. #3
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Citation Envoyé par badi082 Voir le message
    y'a til un moyen pour récuperer mon objet et en particulier son ID qui sera mon itemValue ???? (le itemLabel est le champ description de mon objet)

    thinks
    salut,

    la comboBox n'est pas un objet de type select comme selectOneMenu, c'est juste un inputText avec suggestionBox sous la forme comboBox..
    c'est pour cela qu'il n'est pas possible de récuperer l'id et afficher le label.
    tu peux ajouter à l'interieur un a4j:support et recuperer en java l'id..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <a4j:support event="onselect"
    		action="#{bean.onSelectCombo}"										reRender="otherpanal" />

  4. #4
    Membre confirmé Avatar de nighthammer
    Profil pro
    Développeur Java
    Inscrit en
    Juillet 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2005
    Messages : 122
    Par défaut
    ah ok, désolé.

  5. #5
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 21
    Par défaut
    Merci pour vos reponses
    Citation Envoyé par nighthammer Voir le message
    Deux possibilités, soit tu fais hériter toutes ta classe et ses sous classes de Serializable.
    Mes classes de model implementent toutes l'interface serializable. malgré ça ils ne sont pas mappées en objets ds le managed bean.

    Citation Envoyé par nighthammer Voir le message
    Soit tu crée un Converter qui sera utilisé par jsf avec deux fonctions :
    Concernant la méthode getAsString, j'utilise déja dans mes classes de model la methode toString(). dans mon cas, la methode getAsObject fera l'affaire mais je ne vois pas comment je vais l'implementer sauf d'appler une methode de recherche "FindByLabel" qui me retourne l'objet.

    qqn a une idée sur l'implementation de getAsObject()?
    thinks

    Thinks

  6. #6
    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
    L'idée n'est pas juste d'écrire une méthode getAsObject() pour le plaisir...
    Il faut réaliser un converter, dont les 2 méthodes sont getAsString() et getAsObject().
    Je te renvoie donc vers la FAQ pour la réponse à ta question...
    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

  7. #7
    Membre confirmé Avatar de nighthammer
    Profil pro
    Développeur Java
    Inscrit en
    Juillet 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2005
    Messages : 122
    Par défaut
    Tout pareil que romaintaz

    il faut bien que tu fasses les deux méthodes du converter. Ta méthode toString ne va pas se substituter à la méthode getAsString.

    voici un exemple pour la méthode getAsObject :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	public Object getAsObject(final FacesContext ctx, final UIComponent comp, final String pId) {
     
    		MonObjet monObjet = null;
     
    		//on verifie que l'identifiant est different de null ou vide
    		if ((pId != null) && pId.length() > 0) {
    			ConsultationEntiteService service = (ConsultationEntiteUtil) BeanUtil.getBeanControleur("consultationEntiteUtil");
    			monObjet service.getEntite(MonObjet.class, cle);
    		}
     
    	}
    Et romaintaz, j'avais pas été voir ce point dans la FAQ, mais ça pourrait être intéressant d'ajouter qu'on peut associer un converter à une classe. Perso, c'est quasiment ce que je fais tout le temps.
    Avantage: tu ne peux pas te planter de converter dans ta page.
    Inconvénient: quelqu'un qui reprend ton code ne voit pas qu'il y a un converter utilisé.

  8. #8
    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
    Citation Envoyé par nighthammer Voir le message
    mais ça pourrait être intéressant d'ajouter qu'on peut associer un converter à une classe. Perso, c'est quasiment ce que je fais tout le temps.
    Avantage: tu ne peux pas te planter de converter dans ta page.
    Inconvénient: quelqu'un qui reprend ton code ne voit pas qu'il y a un converter utilisé.
    C'est pas faux !
    Tu n'as qu'à soumettre ton idée dans le post dédié à la FAQ
    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

  9. #9
    Membre confirmé Avatar de nighthammer
    Profil pro
    Développeur Java
    Inscrit en
    Juillet 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2005
    Messages : 122
    Par défaut
    euh... ben il y est déjà

    J'avais pourtant regardé mais je ne l'avais pas vu.

    Alors soit il a été ajouté entre temps. Soit il est temps que je prenne des vacances.

  10. #10
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2010
    Messages : 133
    Par défaut
    Bonjour,

    J'aimerais relancer le sujet. J'ai vraiment du mal à comprendre comment fonctionner le converter avec ses deux fonctions qui lui sont associées. J'ai lu et relu des tutos, mais j'ai encore des lacunes.

    Je vous expose ma question : j'ai chargé mon rich:combobox avec des informations venant de la base de données( listes des utilisateurs ). J'ai utilisé pour cela un suggestionsvalues. Jusque là tout va bien.

    Ensuite, je veux pouvoir récupérer l'identifiant de l'utilisateur sélectionné et c'est là que je coince. je sais que le combobox se comporte comme un input donc on ne peut récupérer que le label.

    Donc d'après les explications que vous avez données, il faut passer par un converter en implémentant les fonctions getAsString et getAsObject.
    J'ai lu la FAQ JSF, mais je ne vois toujours pas comment implémenter la fonction getAsObject, de plus je ne veux pas que ce soit l'Id qui s'affiche dans le combobox, mais le nom de l'utilisateur.

    Quelqu'un pourrait-il m'aider à mieux comprendre? Merci pour votre patience et votre temps.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Multi-selection dans une ComboBox ?
    Par Moloko dans le forum MFC
    Réponses: 5
    Dernier message: 07/07/2021, 17h26
  2. Récupérer la valeur du selected item d'une combobox
    Par Flora2013 dans le forum Langage
    Réponses: 3
    Dernier message: 05/06/2014, 14h01
  3. select items combobox dans datagrid
    Par mouadmagan dans le forum VB.NET
    Réponses: 1
    Dernier message: 30/08/2012, 15h05
  4. selection items combobox
    Par panda78 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 06/08/2012, 00h12
  5. VB net Combobox select Item
    Par seba_stien dans le forum VB.NET
    Réponses: 2
    Dernier message: 15/07/2010, 08h32

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