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

Spring Boot Java Discussion :

Récupérer une liste de liste du contrôleur vers la vue


Sujet :

Spring Boot Java

  1. #1
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut Récupérer une liste de liste du contrôleur vers la vue
    Bonjour

    Je voudrais créer une liste de liste dans mon contrôleur spring, et la récupérer dans la vue en utilisant le jstl.

    J'ai donc ceci au niveau du contrôleur:

    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
     for (Client c : listeClients) {
     
    			 if(entreeService.findListEntreeByIdClient(c.getIdClient()).isEmpty())
    			 {				
    				 listeEntrees.add(listeEntreesVides);
    			 }
    			 else
    			 {
    				 for(Dossier d : dossierService.findDossierByIdClient(c.getIdClient()))
    				 {
    					 listeEntrees.add(entreeService.findListEntreeByIdDossier(d.getIdDossier()));
     
    				 }
     
    			 }
    			 for(List<Entree> list : listeEntrees) {
     
    	            for (Entree item : list) {
    	            	 model.put("entree"+c.getIdClient(), item);
     
    	            } 
     
    	        }    
     
    		 }

    Et lorsque j'essaie de récupérer la liste au niveau de la jsp:

    Code jsp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <c:forEach items="${clients}" var="client" varStatus="boucle1">
     
    <c:set var="liste_entrees" >
        <c:out value="entree${client.idClient}"/>
    </c:set>
     <c:forEach items="${requestScope[liste_entrees]}" var="entree" varStatus="index">
     
    <tr>
    	 <td>${client.nomClient}</td>
    	<td>${entree.nomArticle}</td>
    	<td>${entree.typeArticle}</td>
    	<td>${entree.dateEntree}</td>							           
    </tr>

    J'ai ce message d'erreur:

    Caused by: javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in &lt;forEach&gt;
    Merci

  2. #2
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    Bon finalement j'ai modifié mon code et je n'ai plus de message d'erreur:

    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
    for (Client c : listeClients) {
    			 List<List<Entree>> listeEntrees = new ArrayList<List<Entree>>();
    			 if(dossierService.findDossierByIdClient(c.getIdClient()).isEmpty())
    			 {
    				 model.put("dossier"+c.getIdClient(), listeDossiersVides);
    			 }
    			 else
    			 {
    				 model.put("dossier"+c.getIdClient(), dossierService.findDossierByIdClient(c.getIdClient()));
    			 }
    			 if(entreeService.findListEntreeByIdClient(c.getIdClient()).isEmpty())
    			 {
    				// model.put("entree"+c.getIdClient(), listeEntreesVides);
    				 listeEntrees.add(listeEntreesVides);
    			 }
    			 else
    			 {
    				 for(Dossier d : dossierService.findDossierByIdClient(c.getIdClient()))
    				 {
    					 listeEntrees.add(entreeService.findListEntreeByIdDossier(d.getIdDossier()));
    					// model.put("entree"+d.getIdDossier(), entreeService.findListEntreeByIdClient(c.getIdClient()));
    				 }
     
    			 }
     
    			 model.put("liste_entree_client"+c.getIdClient(),listeEntrees);
     
    		 }

    Code jsp : 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
     
     <c:forEach items="${clients}" var="client" varStatus="boucle1">
     
    <c:set var="liste_entrees" >
    	<c:out value="liste_entree_client${client.idClient}"/>
    </c:set>
    <c:forEach items="${requestScope[liste_entrees]}" var="liste" varStatus="index">
     
    	<c:set var="entrees" >
    		<c:out value="${liste}"/>
    	</c:set>
    	<c:forEach items="${requestScope[entrees]}" var="entree" varStatus="index">
     
    <tr>
    	 <td>${client.nomClient}</td>
    	<td>${entree.nomArticle}</td>
    	<td>${entree.typeArticle}</td>
    	<td>${entree.dateEntree}</td>							           
    </tr>
     
     </c:forEach>
      </c:forEach>
     </c:forEach>

    Sauf que cette fois-ci aucune donnée ne s'affiche dans mon tableau html.

    Donc en résumé j'ai une liste de listes que j'ai créée dans le controleur:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
     List<List<Entree>> listeEntrees = new ArrayList<List<Entree>>();

    et j'ajoute des sous-listes dans cette liste:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    listeEntrees.add(listeEntreesVides);
    .....
    for(Dossier d : dossierService.findDossierByIdClient(c.getIdClient()))
    		 {
    		  listeEntrees.add(entreeService.findListEntreeByIdDossier(d.getIdDossier()));
    		}
    ....
     model.put("liste_entree_client"+c.getIdClient(),listeEntrees);

    Ensuite au niveau de la vue je parcours la liste principale:

    Code jsp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     <c:forEach items="${clients}" var="client" varStatus="boucle1">
     
    <c:set var="liste_entrees" >
    	<c:out value="liste_entree_client${client.idClient}"/>
      </c:set>
      <c:forEach items="${requestScope[liste_entrees]}" var="liste" varStatus="index">

    Et pour chaque élément de la liste principale, je parcours le sous-élément et j'affiche les attributs:

    Code jsp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      <c:set var="entrees" >
    	<c:out value="${liste}"/>
      </c:set>
      <c:forEach items="${requestScope[entrees]}" var="entree" varStatus="index">
     
    <tr>
    	 <td>${client.nomClient}</td>
    	<td>${entree.nomArticle}</td>
    	<td>${entree.typeArticle}</td>
    	<td>${entree.dateEntree}</td>							           
    </tr>
     
    Donc apparemment j'ai omis quelque chose au niveau du code qui parcourt la liste de listes.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 169
    Points : 65
    Points
    65
    Par défaut
    Bonjour,
    Quel résultat obtenez-vous lorsque vous interrogez votre API avec un outil comme Postman ?
    Normalement puisque vous êtes censé produire des collections, vous devriez avoir une structure du type :
    [{..., [{...},{ ...}],{..., [{...},{ ...}], ...]
    Est-ce que c'est le cas ?
    Alain

  4. #4
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    Finalement j'ai pu trouver la solution, j'ai laissé tomber la liste de listes et j'ai opté pour de simples listes:

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     model.put("clients", listeClients);
    		 for (Client c : listeClients) {
     
    			 if(dossierService.findListeDossierByIdClient(c.getIdClient()).isEmpty())
    			 {
    				 model.put("dossier"+c.getIdClient(), listeDossiersVides);
    			 }
    			 else
    			 {
    				 model.put("dossier"+c.getIdClient(), dossierService.findListeDossierByIdClient(c.getIdClient()));
    			 }
    			 if(entreeService.findListEntreeByIdClient(c.getIdClient()).isEmpty())
    			 {
    				 model.put("dossier_vide", listeEntreesVides);
    			 }
     
    			 for(Dossier d : dossierService.findListeDossierByIdClient(c.getIdClient()))
    			 {
    				 if(entreeService.findListEntreeByIdDossier(d.getIdDossier()).isEmpty())
    				 {
    					 model.put(d.getNumDossier(), listeEntreesVides);
    				 }
    				 else
    				 {
    					 model.put(d.getNumDossier(), entreeService.findListEntreeByIdDossier(d.getIdDossier()));
    				 }
    						 }
     
    			 if(sortieService.findListSortieByIdClient(c.getIdClient()).isEmpty())
    			 {
    				 model.put("sortie_vide", listeSortiesVides);
    				 System.out.println("sortie vide pour id: "+c.getIdClient());
    			 }
    			for(Entree e: entreeService.findListEntreeByIdClient(c.getIdClient()))
    			{
    				if(sortieService.findListeSortieByIdEntree(e.getIdEntree()).isEmpty())
    				 {
    					 model.put(e.getNomArticle()+e.getTypeArticle(), listeSortiesVides);
    				 }
    				 else
    				 {
    					 model.put(e.getNomArticle()+e.getTypeArticle(), sortieService.findListeSortieByIdEntree(e.getIdEntree()));
    				 }
    			}
     
    		 }

    Code jsp : 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
    39
     <c:forEach items="${clients}" var="client" varStatus="boucle1">
     
    								         	 <c:set var = "dossiers">
    								         	 	<c:out value="dossier${client.idClient}" />
    								         	 </c:set>
    	                                         <c:forEach items="${requestScope[dossiers]}" var="dossier" varStatus="boucle2">
     
    	                                         <c:set var = "entrees">
    			                                         		<c:out value="${empty dossier.numDossier ? 'dossier_vide' : dossier.numDossier}" />
    										         	 </c:set>
    										         	 <c:forEach items="${requestScope[entrees]}" var="entree" varStatus="boucle3">  
     
    										         	 <c:set var = "test">
    										         	     <c:out value="${entree.nomArticle}${entree.typeArticle}" />
    										         	  </c:set>
    										         	 valeur test est: ${test}
    										         	  <c:set var = "sorties">
    			                                         		<c:out value="${empty test ? 'sortie_vide' : test}" />
    										         	 </c:set>
    										         	 <c:forEach items="${requestScope[sorties]}" var="sortie" varStatus="boucle4">  
     
    								            <tr>
    								                <td><c:out value="${empty client.nomClient ? 'vide' : client.nomClient}" /></td>
    								                <td><c:out value="${empty dossier.numDossier ? 'vider' : dossier.numDossier}" /></td>
    								                <td><c:out value="${empty entree.nomArticle ? 'vide' : entree.nomArticle}" /></td>
    								                <td><c:out value="${empty entree.typeArticle ? 'vide' : entree.typeArticle}" /></td>
    								                <td><c:out value="${empty entree.dateEntree ? 'vide' : entree.dateEntree}" /></td>
    								                <td><c:out value="${empty sortie.dateSortie ? 'vide' : sortie.dateSortie}" /></td>
    								                <td><c:out value="${empty sortie.numSortie ? 'vide' : sortie.numSortie}" /></td>
    								                <td><c:out value="${empty entree.quantiteEntree ? 'vide' : entree.quantiteEntree}" /></td>
    								                <td><c:out value="${empty sortie.quantiteSortie ? 'vide' : sortie.quantiteSortie}" /></td>
    								                <td>qte stock</td>
    								                <td>soldé</td>
    								            </tr>
    								              </c:forEach>
    								               </c:forEach>
    								               </c:forEach>
    								                </c:forEach>
    								        </tbody>

    Merci

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

Discussions similaires

  1. Récupérer une liste de données intranet vers XL
    Par Airthé dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/09/2016, 12h54
  2. Récupérer une liste de bean de ma jsp vers ma servlet
    Par sebagot dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 06/10/2015, 16h03
  3. [JDOM] Récupérer une liste
    Par maniolo dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 23/05/2006, 11h17
  4. [VB]Récupérer une liste de fichiers
    Par yaya54 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 20/02/2006, 16h03
  5. Réponses: 4
    Dernier message: 24/11/2005, 09h11

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