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 - ComboBox et récupération de l'Id de l'élément sélectionné


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 Richfaces - ComboBox et récupération de l'Id de l'élément sélectionné
    Bonjour,

    J'aimerais relancer le sujet qui est considéré comme résolu. 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 j'ai pu lire, 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.

  2. #2
    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
    Bonjour,


    Citation Envoyé par gotteserbin Voir le message
    Bonjour,
    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.
    Dire que tu ne récupères que le label est faux.
    Contrairement à un inputText, un <rich:combobox> s'alimente avec des <f:selectItem(s)>. Un selectItem est un couple (valeur, label). Le label est ce qui est affiché à l'utilisateur. La valeur est une valeur identifiant le(s) choix de l'utilisateur.
    Dans ton cas, tu vas donc ajouter un selectItem qui dispose à la fois de l'ID de l'utilisateur (valeur) ainsi que de son nom (label). En faisant ce genre de code par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public List<SelectItem> getUsersList() {
        if (usersList == null) {
            usersList = new ArrayList<SelectItem>();
            for (User u : getMaListeDUtilisateurs()) {
                usersList.add(new SelectItem(u.getId(), u.getName()));
            }
        }
        return usersList;
    }
    Ainsi, dans ton bean, tu connaitras l'ID du choix fait par l'utilisateur.

    C'est là qu'interviendra au final ton converter. Ta méthode getAsObject() prendra en paramètre l'ID de l'utilisateur (sous forme de String) et pourra ainsi retrouver l'objet correspondant.
    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

  3. #3
    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
    Merci romaintaz pour ta réponse ! Je le teste toute de suite ! et je t'en dis plus.

  4. #4
    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
    J'ai une erreur qui provient de mon getAsString

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.String cannot be cast to model.db.Utilisateur at view.converter.UserConverter.getAsString(UserConverter.java:45)
    voici le code de mon getAsString identique à celle de la FAQ JSF

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public String getAsString(FacesContext context, UIComponent component, Object value) {
     
    		Utilisateur utilisateur = (Utilisateur) value;
    		return utilisateur.getNom();
    	}
    et le code de mon getAsObject:
    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 id) {
     
    			FrmUserBean frmUserBean = (FrmUserBean) context.getApplication().getELResolver().getValue(context.getELContext(), null, "frmUserBean");
    			for(Utilisateur utilisateur : frmUserBean.getUser_list()){
    				if(utilisateur.getId().equals(id)){
    					return utilisateur;
    				}
    		}
    		return null;
    	}
    merci.

  5. #5
    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
    je complète en ajoutant le code de getUserlist() et getUser_list();

    getUserlist()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public List getUserlist() {
    		if(userlist == null){
    			userlist = new ArrayList<SelectItem>();
    			for(Utilisateur user : getUser_list()){
    				userlist.add(new SelectItem(user.getId(), user.getNom()));
    			}
    		}
    		return userlist;
    	}
    getUser_list()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public List<Utilisateur> getUser_list() {
    		user_list = this.utilisateurService.findAll();
    		return user_list;
    	}

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <rich:comboBox disabled="#{frmUserBean.invetat }" width="200" id="comboUser" binding="#{frmUserBean.comboUser }"
    								value="#{frmUserBean.utilisateur }" immediate="true" converter="userConverter">	
    								<f:selectItems value="#{frmUserBean.userlist }"/>
    								<a4j:support event="onselect" immediate="true" action="#{frmUserBean.onSelectUser }"
    									reRender="user_panel, crudUser, rechuser" ajaxSingle="true">
    								</a4j:support>							
    							</rich:comboBox>

  6. #6
    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
    ton converter retourne un objet de type Utilisateur, donc, le selectItem doit prendre un objet de type Utilisateur en valeur..

  7. #7
    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
    Ton getAsString() doit utiliser l'ID de l'utilisateur et non pas son nom !
    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

Discussions similaires

  1. rich:combobox et récupération de l'id
    Par skouza dans le forum JSF
    Réponses: 1
    Dernier message: 11/04/2011, 16h04
  2. Réponses: 2
    Dernier message: 16/06/2009, 10h10
  3. Réponses: 5
    Dernier message: 24/11/2006, 10h56
  4. ComboBox et récupération de ligne
    Par Andry dans le forum Delphi
    Réponses: 11
    Dernier message: 19/07/2006, 14h54
  5. Réponses: 9
    Dernier message: 15/05/2006, 17h51

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