Bonjour,

j'ai un soucis d'affichage des données issues d'une HashMap dans une JSP.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
Liste des paramètres
 
 
Clé Valeur
p    2
v    8
 
Clé Valeur
p    2
v    8
Problématique initiale : afficher dans un tableau la liste des paramètres se trouvant dans l'URL.
Je pensais pour cela utiliser un objet implicite contenant ces paramètres, normalement une Map, mais je n'y suis pas arrivé.
J'ai donc demandé au controleur de faire passer à la JSP une HashMap que j'ai construite moi-même en y mettant les paramètres de la requête.

Maintenant que cette Map est transmise à la JSP, je fais une boucle pour afficher son contenu dans un tableau, mais tout est doublé. Il semblerait que la boucle tourne autant de fois qu'il y a d'entrées dans la Map alors que je souhaiterais en toute logique qu'elle tourne autant de fois qu'il y a un couple clé/valeur.

Affichage dans la JSP :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
		    <table>
		    	<tr>
		    		<th>Clé</th>
		    		<th>Valeur</th>
		    	</tr>
			    <c:forEach items="${Params}" var="entry">
			        <tr>
				        <td>${entry.key}</td>
				        <td>${entry.value}<br></td>
			        </tr>
			    </c:forEach>
		    </table>

Construction de la Map par le controleur

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
 
		/**
		 * @requestParams HashMap stockant les paramètres de la requête
		 */
		HashMap<String,String> requestParams = new HashMap<String,String>(); //params de la requête
		HashMap<String,String> paramsOut = new HashMap<String,String>(); //params à renvoyer à la JSP
		requestParams = (HashMap) request.getParameterMap();
		Iterator<Map.Entry<String,String>> it = requestParams.entrySet().iterator();
		Iterator<Map.Entry<String,String>> itOut = paramsOut.entrySet().iterator();
		while(it.hasNext()) {
			Map.Entry couples = (Map.Entry)it.next();
			paramsOut.put((String) couples.getKey(), request.getParameter((String)couples.getKey()));
		}
			request.setAttribute("Params", paramsOut);
			RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(ma_page);
			dispatcher.forward(request,response);
Savez-vous me dire ce que je dois changer à ma boucle <c:forEach... afin que j'ai autant de lignes que de couples clé/valeur ?

Accessoirement, comment dois-je invoquer l'obket implicite "param" pour obtenir le même résultat sans passer par le controleur pour faire le job ?

Merci d'avance.