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 :

Affichage de liste déroulante


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    rockstar
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : rockstar
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Par défaut Affichage de liste déroulante
    bonjour, j ai a peu près le même problème concernant l'affichage dans la liste déroulante(jsf)
    j ai une table information avec plusieurs dont pays qui comporte la liste déroulante. j arrive a charger les données de la base de donnée (oracle) dans la page principale qui est séparée en deux(a gauche j ai le le label pays avec la liste déroulante et a droit l'ensemble des colonnes de la tables avec les données). J'utilise comme ide Netbeans et comme framework primefaces
    j aimerais faire en sorte que lorsque je choisi un pays dans la liste déroulante (cote gauche), que toutes les informations le concernant s'affiche a droite.
    alors j aimerais avoir de l'aide sur:
    1- comment faire pour alimenter ma liste dertoulante
    2- afficher les informations concernant ce pays après sélection

    Merci d'avance

  2. #2
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 505
    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 505
    Par défaut
    Bonjour,

    1 - Dans ta classe PaysController{} tu dois déclarer (en plus du code généré par NetBeans) une variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     private ArrayList<Pays> allPays = new ArrayList<Pays>();
    et une méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public ArrayList<Pays> findAllPays(){
          // corps de la méthode
    }
    La liste des pays va alimenter ta liste déroulante (tu dois faire quelque petites modifications dans le code de la page .xhtml). Si ça peut t'aider: la classe AutoCompleteBean.java.


    2 - En cliquant sur une valeur de la liste déroulante tu séléctionnes un objet Pays, puis tu t'arranges pour ramèner de la base de données toutes les informations nécessaires concernant ce pays et les afficher dans le tableau.

    Bon courage!

  3. #3
    Membre à l'essai
    Femme Profil pro
    rockstar
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : rockstar
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Par défaut Liste derroulante
    Bonjour Mishulyna,
    d'abord merci pour ta réponse.
    je vais faire comme tu as dit
    mais concernant l'exemple de la page citée je ne voudrais pas faire comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    players.add(new Player("Messi", 10));
                    players.add(new Player("Ibrahimovic", 9));
                    players.add(new Player("Henry", 14));
                    players.add(new Player("Iniesta", 8));
                    players.add(new Player("Xavi", 6));
                    players.add(new Player("Puyol", 5));
    .
    mais plutot que ca soit "dynamique" si je peux me permettre le terme c est a dire que la lsite se remplis toute seule a partir des info qui se trouvent dans la table <infromation> mais je ne sais pas comment ecrire la fonction qui me fera ca alors si tu pouvais me donner une idee
    Merci

  4. #4
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 505
    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 505
    Par défaut
    Bonjour laurence.k,

    Tu n'as pas besoin de faire cela puisque tu ramènes des objets de la base de données. Par contre, la méthode public void handleSelect(SelectEvent event) {} pourrait te rendre service par la suite si tu y ajoutes des instructions.

    Si tu n'as qu'une seule table: il faut faire une requête qui te ramène toutes les valeurs "information.pays" dans la collection allPays. S'il y a plusieurs lignes "Information" pour un même "Pays": pense a chercher les valeurs distinctes des "pays" pour ne pas avoir des doublons dans la liste.

    Si tu as généré le code avec NetBeans à partir de la base de données: regarde un peu les @NamedQuery dans la classe Information.java, ça pourrait t'inspirer.

  5. #5
    Membre à l'essai
    Femme Profil pro
    rockstar
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : rockstar
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Par défaut
    Bonjour Mishulyna,
    je voulais remplir ma liste avec l'exemple de la methode que tu m'avais indique mais vu que j'ai qu'une seule table <information> contenant les champs pays et autres alors pour remplir la liste j'ai procede ainsi :
    Dans le ejb (Accueil.java)j'ai fais:
    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
     
     
    @Stateless
    public class Accueil implements AccueilLocal {
     
        // Add business logic below. (Right-click in editor and choose
        // "Insert Code > Add Business Method")
     
        @PersistenceContext(unitName="PremierAppli-ejbPU")
        EntityManager fil;
     
        @Override
        public List<Information> listeAllPays(){
     
            return fil.createNamedQuery("Information.findAll").getResultList();
        }
        //ici j'ai utilise "Information.findAll" car en utlisant le "Information.findByIdPays" on me demandait de donner un pays en parametre
    dans le bean (AccueilBean.java):
    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
     
     
    @ManagedBean(name="clients")
    @RequestScoped
    public class AccueilBean implements Serializable{
     
        /**
         * Creates a new instance of AccueilBean
         */
        @EJB
        private AccueilLocal com;
        List<Information> pays;
        String pays1;
     
        public List<Information> getpays() {
     
            return pays;
        }
        public void setPays(List<Information> pays) {
            this.pays = pays;
        }
     
        public String getPays1() {
            return pays1;
        }
        public void setPays1(String pays1) {
            this.pays1 = pays1;
        }
     
        //remplissage de la liste derroulante
        public List<Information> getDonnePays(){
     
            pays = com.listeAllPays();
            return pays;
        }
    et enfin dans le xhtml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    <h:outputText value="Pays: " />  
                                <p:selectOneMenu value="#{clients.pays1}">  
                                    <f:selectItem itemLabel="Select One" itemValue="" />  
                                    <f:selectItems value="#{clients.donnePays}" var="tag"
                                                   itemLabel="#{tag.pays}" itemValue="#{tag.idPays}"/>  
                                </p:selectOneMenu>
    la liste s'est rempli sauf que j'ai eu des doublons comme tu l'as dis, mais en utilisant le distinct dans le code avec NetBeans à partir de la base de données alors j'ai voulu modifie le ejb(Accueil.java) en faisant ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        @Override
        public List<Information> listeAllPays(){
                Query query;
            query = fil.createQuery("SELECT DISTINCT pays FROM Information");
                query.getResultList();
            return (List<Information>) query;
        }
    et j'ai eu cette erreur que je ne comprends pas:

    javax.ejb.EJBException
    at com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5215)
    at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5113)
    at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4901)
    at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2045)
    at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1994)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:222)
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:89)
    at $Proxy389.listeAllPays(Unknown Source)
    .........
    .........
    .........
    .........
    Caused by: java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager:
    Exception Description: Syntax error parsing the query [SELECT DISTINCT pays FROM Information], line 0, column -1: unexpected end of query.
    Internal Exception: MismatchedTokenException(-1!=80)
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1477)
    at com.sun.enterprise.container.common.impl.EntityManagerWrapper.createQuery(EntityManagerWrapper.java:436)
    at ejb.Accueil.listeAllPays(Accueil.java:49)

  6. #6
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 505
    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 505
    Par défaut
    Bonjour,

    La synthaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Information> pays;
    peut générer des confusions: une liste d'objets Information devrait s'appeler plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Information> allInformation;
    La preuve: tu demandes ici une liste d'objets "Information"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        @Override
        public List<Information> listeAllPays(){
            Query query;
            query = fil.createQuery("SELECT DISTINCT pays FROM Information");
            query.getResultList(); 
            return (List<Information>) query;
        }
    Je suppose qu'il te faut plutôt (si le type de la colonne "pays" de la table "Information" est String):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        public List<String> listeAllPays(){
            Query query;
            query = fil.createQuery("SELECT DISTINCT pays FROM Information");
            return (List<String>) query.getResultList(); // ici l'on retourne la liste de String trouvée par la query
        }
    Si c'est le cas déclare une private ArrayList<String> allDistinctPays; dans la classe ou change le type de la liste "pays".

    Essaye d'éviter les variables du même nom (pays et pays1) surtout pour des types de variables différents. Pour un petit projet c'est gérable mais ça devient vite embêtant si le nombre de classes augmente. Exemple: si tu auras des objets "pays" dans deux classes "Employe" et "Client" tu peux les nommer "employePays" dans la première et "clientPays" dans la deuxième même s'il s'agit du même type d'objet.

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

Discussions similaires

  1. [DOM] affichage naviguateur liste déroulant lié
    Par matt16matt dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 26/05/2008, 19h10
  2. Réponses: 7
    Dernier message: 24/01/2008, 08h51
  3. affichage =/= valeur (liste déroulante)
    Par laurent.c123 dans le forum JSF
    Réponses: 2
    Dernier message: 05/06/2007, 13h08
  4. Pb d'affichage avec liste déroulante
    Par Tintou dans le forum Access
    Réponses: 5
    Dernier message: 02/05/2007, 17h28
  5. Aide pour un affichage de listes déroulantes
    Par jfjava2002 dans le forum Langage
    Réponses: 1
    Dernier message: 02/03/2006, 18h01

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