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 récupération objet selectOneMenu


Sujet :

JSF Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 42
    Points : 26
    Points
    26
    Par défaut problème récupération objet selectOneMenu
    Bonjour à tous,

    j'ai la liste déroulante suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <h:selectOneMenu id="resp" value="#{tacheBean.tache.responsable}" converter="utilisateurConverter">
                                <f:selectItems value="#{utilisateurBean.selectItemListUsers}"  />
                            </h:selectOneMenu>
    J'alimente ma liste déroulante par la fonction suivante qui me retourne une liste d'Item clé/valeur de la forme Utilisateur/Nom Prenom :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public List<SelectItem> getSelectItemListUsers() {
     
            List<SelectItem> listItems = new ArrayList<SelectItem>();
            if (usersList == null) {
                usersList = this.userEjb.listeUtilisateur();
                for(Utilisateur user : usersList)
                {
                    listItems.add(new SelectItem(user, user.getNom()+" "+user.getPrenom()));
                }
            }
            return listItems;
        }
    Je voudrai pouvoir récupérer l'objet sélectionné dans ma liste pour le stocker directement dans l'objet "responsable" qui est aussi de type Utilisateur, comme je l'indique dans mon code JSF :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:selectOneMenu id="resp" value="#{tacheBean.tache.responsable}" converter="utilisateurConverter">
    Malheureusement j'ai l'erreur suivante :
    Erreur de conversion lors de la définition de la valeur «entity.Utilisateur@137cf19» pour «null Converter».

    Après de nombreuses recherches sur internet, il faudrait apparemment que je crée un converter.
    J'ai donc la classe suivante :

    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
    25
    26
    package converter;
     
    import entity.Utilisateur;
    import javax.faces.component.UIComponent;
    import javax.faces.context.FacesContext;
    import javax.faces.convert.Converter;
    import javax.faces.convert.FacesConverter;
     
    @FacesConverter("utilisateurConverter")
    public class UtilisateurConverter implements Converter {
     
        @Override
        public Object getAsObject(FacesContext context, UIComponent component, String value) {
     
     
            return null;
        }
     
        @Override
        public String getAsString(FacesContext context, UIComponent component, Object value) {
            Utilisateur u = (Utilisateur) value;
            return u.getNom()+ " "+u.getPrenom();
        }
     
     
    }
    J'ai besoin de vous pour ma fonction getAsObject, je ne sais pas du tout comment convertir en Objet Utilisateur.
    Merci d'avance pour votre aide.

  2. #2
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 504
    Points : 7 840
    Points
    7 840
    Par défaut
    Bonjour,

    Voici un exemple de converter "par défaut" généré par NetBeans:
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    @FacesConverter(forClass = Utilisateur.class)
        public static class UtilisateurControllerConverter implements Converter {
     
            @Override
            public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
                if (value == null || value.length() == 0) {
                    return null;
                }
                UtilisateurController controller = (UtilisateurController) facesContext.getApplication().getELResolver().
                        getValue(facesContext.getELContext(), null, "utilisateurController");
                return controller.ejbFacade.find(getKey(value));
            }
     
            java.lang.Integer getKey(String value) {
                java.lang.Integer key;
                key = Integer.valueOf(value);
                return key;
            }
     
            String getStringKey(java.lang.Integer value) {
                StringBuilder sb = new StringBuilder();
                sb.append(value);
                return sb.toString();
            }
     
            @Override
            public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
                if (object == null) {
                    return null;
                }
                if (object instanceof Utilisateur) {
                    Utilisateur o = (Utilisateur) object;
                    return getStringKey(o.getIdpersonne());
                } else {
                    throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: " + UtilisateurController.class.getName());
                }
            }
        }
    Dans la classe Utilisateur vous devriez avoir une méthode toString() qui vous retourne le nom et le prénom de l'utilisateur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @Override
        public String toString() {
            return this.nom + " " + this.prenom;
        }
    Chaque fois que tu dis "je ne peux pas", n'oublie pas d'ajouter le mot "encore".

Discussions similaires

  1. [2.x] probléme récupération objet
    Par chlock62 dans le forum Symfony
    Réponses: 1
    Dernier message: 27/03/2015, 17h58
  2. Problème récupération d'un objet avec WCF
    Par pivox dans le forum Windows Communication Foundation
    Réponses: 7
    Dernier message: 10/05/2014, 23h46
  3. problème récupération objet selectOneMenu
    Par leTiDevDu54 dans le forum Java EE
    Réponses: 0
    Dernier message: 31/01/2014, 11h18
  4. Réponses: 7
    Dernier message: 27/06/2011, 11h08
  5. [Débutant] Problème récupération de données
    Par flogreg dans le forum Servlets/JSP
    Réponses: 26
    Dernier message: 20/08/2004, 17h29

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