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 :

Liste ListShuttle avec Richface


Sujet :

JSF Java

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 72
    Par défaut Liste ListShuttle avec Richface
    Bonjour à tous, pardon de créer un nouveau post sur ce sujet, je me permets d'exposer mon code et de vous demander si vous pouviez m'aider.

    J'utilise l'élément de richaface listShuttle, dont la démo est ici :

    http://livedemo.exadel.com/richfaces...ttle&tab=usage


    J'ai lu les posts de ce forum portant sur les listShuttle, dont celui ci crée par RomainTaz :

    http://www.developpez.net/forums/d57...me-validation/

    Mon souci est que que je n'arrive pas à utiliser correctement cet élément, plus précisément, à récupérer ce qu'il y a dans la seconde liste.

    Voici la partie de ma page Jsf qui l'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     <rich:listShuttle  targetCaptionLabel="Groupes choisis" sourceCaptionLabel="Groupes disponibles" var="item" sourceValue="#{GroupeListBean.groupesCompetences}" targetValue="#{OrganisationBean.listeGroupes}"  >
     
                 <h:column>
                      <h:outputText     value="#item.nomGroupeCompetence}" /> 
                </h:column>
     
     
    </rich:listShuttle>
    L'utilisateur doit choisir des groupes. La variable groupesCompetences de GroupeListbean est de type List, ainsi que listeGroupes de OrganisationBean.
    C'est dans cette dernière que je souhaite récupérer la liste des groupes sélectionnés.
    L'affichage se déroule bien, donc je pense que le code item.nomGroupeCompetence est correcte, mais l'erreur se produit au clic d'enregistrement : là je dois récupérer la liste des groupes sélectionnés, mais j'ai l'erreur :

    #{item.nomGroupeCompetence}' Property 'nomGroupeCompetence' not found on type java.lang.String

    J'ai mis le lien sur le post de Romaintaz car visiblement c'est un souci de converter, mais je ne vois pas si je dois créer un converter, et ce qu'il doit faire ..

    Merci à tous

  2. #2
    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
    est ce que groupeCompetences contient le champs nomGroupeCompetence avec ses getter/setter?

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 72
    Par défaut
    Oui, GroupeCompetence est un bean , défini avec plusieurs attributs, dont nomGroupeCompetence, et il possède bien son getter et son setter.

    Le fait que l'affichage des noms des groupes se passent bien dans la première liste me laisse penser que ce n'est donc pas ce bean qui pose un souci ..
    L'affichage dans la seconde liste marche bien aussi, je vous mets un affichage de ce que j'obtiens en pièce jointe.
    Images attachées Images attachées  

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 72
    Par défaut
    J'ai crée mon propre converter pour résoudre ce problème qui semble être un souci de conversion Mon Objet / String.

    Donc, je crée ma classe GroupeCompetenceConverter :

    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
     
    public class GroupeCompetenceConverter implements Converter {
     
        List<GroupeCompetence> groupsComp ;
     
        public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
            this.groupsComp = process.EquipeDAO.listerEquipes();
     
            for (GroupeCompetence groupeComp : groupsComp) {
                       if (groupeComp.getNomGroupeCompetence().equals(arg2)) {
                           return groupeComp;
                       }
                   }              
                   return null;
        }
     
        public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
            return ((GroupeCompetence) arg2).getNomGroupeCompetence();
     
        }
    }
    Dans mon bean GroupeCompetence, je réecris les méthodes equals et hashcode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    @Override
    public boolean equals(Object o) {
    		GroupeCompetence d = (GroupeCompetence)o;
    		return d.getNomGroupeCompetence().equals(getNomGroupeCompetence());
    	}
     
    @Override
    public int hashCode() {
             return this.nomGroupeCompetence.hashCode();       
    }
    Sachant que GroupeCompetence a comme attributs numGroupeCompetence, nomGroupeCompetence, de type int et String.

    La page jsf :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <rich:listShuttle converter="GroupeCompetenceConverter" id="listeGroupe" immediate="true"   targetCaptionLabel="Groupes choisis" sourceCaptionLabel="Groupes disponibles"  style="left:48px ; top :250px ; position : absolute" var="groupe" sourceValue="#{GroupeCompetenceListBean.groupesCompetences}" targetValue="#{OrganisationBean.listeGroupesCompetence}"  >
                                   <h:column>
                                          <h:outputText value="#{groupe.nomGroupeCompetence}" /> 
                                   </h:column>
                            </rich:listShuttle>
     
                             <rich:message for="listeGroupe" />
    et le faces config :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     <converter>
                <display-name>GroupeCompetenceConverter</display-name>
                <converter-for-class>
                    models.GroupeCompetence
                </converter-for-class>
                <converter-class>
                    Converters.GroupeCompetenceConverter
                </converter-class>
            </converter>

    Et là .. toujours une erreur .. mais différente ..

    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
     
    Stacktrace:
            at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
            at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
            at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
            at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
            at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
            at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
            at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
            at com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:408)
            ... 37 more
    Caused by: javax.faces.FacesException: Erreur dans lexpression: Object nommé GroupeCompetenceConverter ne peut tre trouvé.

    si l'un de vous voyait ce qui fait que il ne trouve pas mon converter ... je pensais pourtant avoir défini correctement ..

    Merci beaucoup

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 72
    Par défaut
    Je continue à faire part de l'avancement ..

    en fait je m'étais trompée dans la déclaration de mon converter au sein du faces config :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     <converter>
     
                <converter-id>GroupeCompetenceConverter</converter-id>            
               <converter-class>Converters.GroupeCompetenceConverter</converter-class>
     
     
            </converter>
    Est la définition qui convient.

    Mais à présent, alors que mon converter est défini, que j'ai redéfinie les méthodes comme décrites dans le post ci dessus, et que j'utilise mon converter j'ai une erreur qui me fait douter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    GRAVE: "Servlet.service()" pour la servlet Faces Servlet a généré une exception
    java.lang.ClassCastException: java.lang.String cannot be cast to models.GroupeCompetence
            at Converters.GroupeCompetenceConverter.getAsString(GroupeCompetenceConverter.java:36)
    Donc cela signifie que ma méthode GetAsString , qui doit me renvoyer un String en fonction d'un objet, recoit en fait en paramètre un String !!! :s:s:s

    Pourtant, je passe bien dans mes 2 listes (source et target) des listes d'objets GroupeCompetence ....

    Alors, est ce qu'en fait les listes de listShuttle ne prennent que des listes de SelectItem ?

    Je ne sais plus comment faire, merci de votre aide

  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
    il y'a deux manières de le faire, les deux sont expliquées dans le
    ici

  7. #7
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 72
    Par défaut
    J'ai bien sur été voir la FAQ avant de poser mon post, si je fais part de mon code et de mes questions, c'est parce que je n'ai pas du comprendre tout le principe ...

    Je viens de relire les 2 méthodes de faire :

    La première, on définit son converter, on indique à notre élément de l'utiliser et on le déclare dans le faces config.

    La deuxième, on a aussi définit le converter sauf que on indique d'une manière différente que c 'est ce converter qui sera utilisé ....

    Ce n'est pas ça ?

    J'ai du louper quelque chose d'essentiel ...

  8. #8
    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
    ok
    excuse je n'ai pas bien lu l'exception..

    tu retourne bien un String dans ta méthode getAsString

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((GroupeCompetence) arg2).getNomGroupeCompetence();

  9. #9
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 72
    Par défaut
    Oui, c'est bien un String l'attribut nomGroupeCompetence.
    Donc , je dois bien retourner un String, vu que c'est la méthode getAsString ?

  10. #10
    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
    ouii le probleme c'est le cast, soit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (GroupeCompetence) arg2
    soit dans le return,
    sépare les lignes en debug regartde le type de Object en parametre..

  11. #11
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 72
    Par défaut
    Ok, merci de ton aide !

    J'ai séparé en 3 lignes comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) 
    {
            GroupeCompetence g = (GroupeCompetence) arg2 ;
            String essai = g.getNomGroupeCompetence();
            return essai ;
     
        }
    et dans la liste des variables locales, il m'indique bien que arg2 est un objet de type GroupeCompetence.

    J'ai mis des breakpoints sur mes 3 lignes, et pourtant l'erreur semble être au niveau de la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GroupeCompetence g = (GroupeCompetence) arg2 ;

  12. #12
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 72
    Par défaut
    En fait , non,
    excusez moi, lorsque je continue l'exécution, il passe par la méthode getAsString pour chacun de mes groupes de compétences.

    J'essaie de voir à quel endroit cela bloque, je vous tiens au courant.

  13. #13
    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
    peut être qu'un élément de ta liste n'est pas de type GroupeCompetence .

    tu utilise les types generic de java 5.?
    déclaration de ta liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List<GroupeCompetence > groupeCompetenceitemps = new ArrayList<GroupeCompetence >();

  14. #14
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 72
    Par défaut
    Bon, mea culpa, ma fonction pour lister les groupes de compétences dans la fonction getAsObject n'était pas la bonne, et là je n'ai plus d'erreur !!

    Je vais essayer de tester à présent si on récupère bien les éléments de la liste target, merci !

  15. #15
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 72
    Par défaut
    Pour répondre à Sniper, oui j'utilise les types de java.5, et ma définition de ma liste est bien en effet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<GroupeCompetence> groupeCompetenceItems = new arrayList<GroupeCompetence>() ;

    Et c'était justement dans les fonctions où je récupérais la liste des groupes de compétences existants, dans la source value, que il y avait un souci.
    J'ai changé toutes ces fonctions en indiquant bien List<GroupeCompetence> et cela fonctionne à présent.

    Je te remercie de ton intérêt !

    si cela intéresse des personnes, je peux mettre mon code à disposition

  16. #16
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 55
    Par défaut
    cela m'interesse

    j'ai eu le meme soucis que toi, j'ai fais un converter mais maintenant j'ai une autre erreur : qd j'appuie sur un btn submit :

    Component ManageComplaintForm:j_id_jsp_1257692923_11 has invalid value expression bean.Complaint@4d40df"

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

Discussions similaires

  1. liste déroulante avec ajout possible
    Par bachilbouzouk dans le forum ASP
    Réponses: 5
    Dernier message: 19/04/2005, 11h48
  2. liste déroulante avec données mysql
    Par fab44 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 24/02/2005, 19h45
  3. liste deroulante avec plusieurs champs
    Par JulienT dans le forum Struts 1
    Réponses: 4
    Dernier message: 20/04/2004, 17h17
  4. liste déroulante avec session
    Par leeloo076 dans le forum ASP
    Réponses: 3
    Dernier message: 19/03/2004, 11h01
  5. [LG]Listes chainées avec pointeur
    Par PaowZ dans le forum Langage
    Réponses: 2
    Dernier message: 17/02/2004, 19h49

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