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

Servlets/JSP Java Discussion :

Comment parcourir un ArrayList contenant un Map ?


Sujet :

Servlets/JSP Java

  1. #1
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 496
    Par défaut Comment parcourir un ArrayList contenant un Map ?
    Salut,

    Je viens de découvrir java, et j'essaie de récupérer les données d'une base de donnée mysql puis les stocker dans un ArrayList :
    Code java : 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
     
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            //processRequest(request, response);
            response.setContentType("text/html");  
            ConnectDb Con=new ConnectDb();
            ArrayList list=new ArrayList();
            PrintWriter out=response.getWriter();
            try {
                PreparedStatement prepareStmt=Con.getConnection().prepareStatement("select * from produits");
                ResultSet data=prepareStmt.executeQuery();
                while(data.next()){
                    Map map=new HashMap();
                    map.put("id_produit",data.getInt(1));
                    map.put("nom_produit", data.getString(2));
                    map.put("description", data.getString(3));
                    map.put("prix", data.getInt(4));
                    map.put("qte", data.getInt(5));
                    map.put("idCat", data.getInt(6));
                    map.put("idMarque", data.getInt(7));
                    list.add(map);
                }
                request.setAttribute("liste",list);
                RequestDispatcher rd = request.getRequestDispatcher("liste.jsp");
                rd.forward(request, response);
                Con.getConnection().close();
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(listeServlet.class.getName()).log(Level.SEVERE, null, ex);
            } catch (SQLException ex) {
                Logger.getLogger(listeServlet.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    Puis je transmet la variable list à la page liste.jsp, et je la récupère dans jsp comme suite :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ArrayList ls=(ArrayList)request.getAttribute("liste");

    Tout est bon vu que le contenu de la liste est :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    [
    {id_produit=1,nom_produit=Nom1,description=Desc1,prix=Prix1,qte=Qte1,idCat=1,idMarque=1},
    {id_produit=2,nom_produit=Nom2,description=Desc2,prix=Prix2,qte=Qte2,idCat=1,idMarque=2},
    {id_produit=3,nom_produit=Nom3,description=Desc3,prix=Prix3,qte=Qte3,idCat=2,idMarque=3},
    ...
    ]

    Maintenant comment je dois parcourir cette ArrayList pour afficher ses données dans un <table> ?

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 496
    Par défaut
    Apparemment j'ai trouvé la réponse tout seul :
    Code jsf : 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
     
    <h1>Liste des produits</h1>
            <table>
                <thead>
                    <tr>
                        <th>Id</th>
                        <th>Nom</th>
                        <th>Desc</th>
                        <th>Prix</th>
                        <th>Qte</th>
                        <th>Id catégorie</th>
                        <th>Id Marque</th>
                    </tr>
                </thead>
                <tbody>
                    <% 
                    List<HashMap<String,Object>> ls=(ArrayList<HashMap<String,Object>>)request.getAttribute("liste"); //c'est comme ça que je devais récupérer la liste.
                    if(ls!=null){ 
                        System.out.println("size :"+ls.size());
                        
                        for (HashMap<String,Object> entry :ls) {//parcourir la liste
                            %>
                            <tr><td><%=entry.get("id_produit").toString()%></td>
                                <td><%=entry.get("nom_produit").toString()%></td>
                                <td><%=entry.get("description").toString()%></td>
                                <td><%=entry.get("prix").toString()%></td>
                                <td><%=entry.get("qte").toString()%></td>
                                <td><%=entry.get("idCat").toString()%></td>
                                <td><%=entry.get("idMarque").toString()%></td>
                            </tr>
                            <%
                        }
                        
     
                }%>
     
                </tbody>
            </table>

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Attention, une HashMap ne garantit pas d'ordre dans les entrées. Donc tu n'as aucune garantie que tes colonnes ne seront pas mélangées à un moment données. Il vaut mieux utiliser une LinkedHashMap (l'ordre est l'ordre d'insertion), ou une TreeMap éventuellement (l'ordre est celui qu'on veut, par défaut, l'ordre naturel des clefs).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 496
    Par défaut
    je ne le savais pas, merci pour l'information.

    Mais est-ce qu'on peut parcourir le LinkedHashMap comme le HashMap ou bien il faut passer autrement?

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    LinkedHashMap implémente Map, tout comme HashMap, donc pour un parcours standard par les API de l'interface Map, c'est exactement pareil.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 496
    Par défaut
    Parfait, merci joel.drigo j'ai remplacé HashMap par LinkedHashMap et cela fonctionne.

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Je viens de me rendre compte que ma remarque n'était pas pertinente car tu accèdes aux valeurs via les clefs, sans parcours. J'ai mal vu et j'ai été trompé par le nom de la variable, entry, qui m'a fait penser que tu parcourais les entrées de la Map.

    Même si le faible nombre de clefs doit faire que ça ne change pas énormément, lors d'un simple parcours, il est plus efficace de parcourir par l'entrySet, ou les valeurs , ou pour se rapprocher de ton implémentation, sans avoir à indiquer explicitement toutes les clefs, par le keySet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for (HashMap<String,Object> entry :ls) { 
     
                            %>
                            <tr>
                            <% for(String key : entry.keySet()) { %> <td><%= entry.getValue(key)%></td> <% } %>
                            </tr>
    }
    Par les valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for (HashMap<String,Object> entry :ls) { 
     
                            %>
                            <tr>
                            <% for(Object value : entry.values()) { %> <td><%= value %></td> <% } %>
                            </tr>
    }
    Ces deux codes en revanche imposent de passer par une LinkedHashMap pour avoir les données affichées dans l'ordre d'insertion.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 496
    Par défaut
    Bonsoir,

    Ha! , cette syntaxe est beaucoup plus pertinente, j'ai essayé les deux codes et au début le compilateur m'affichait une erreur dans : entry.getValue(key) puis je l'ai remplacé par entry.get(key) et ça a fonctionné.

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Oui, effectivement, une faute de frappe de ma part. Mais quitte à utiliser une LinkedHashMap, autant utiliser la seconde solution, qui évite de passer par la résolution des mappings.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. Comment parcourir une map en sens inverse
    Par alen dans le forum SL & STL
    Réponses: 8
    Dernier message: 03/08/2008, 20h24
  2. Comment parcourir le fichier de mapping facilement?
    Par khatuido dans le forum Hibernate
    Réponses: 4
    Dernier message: 29/01/2008, 16h09
  3. parcourir ArrayList contenant des vectors
    Par imane_bennouna dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 04/08/2006, 10h56
  4. Réponses: 5
    Dernier message: 09/07/2006, 18h40
  5. Réponses: 6
    Dernier message: 14/04/2006, 11h18

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