Bonjour tt le monde
Est ce qu'on peut iterer une liste Map avec la tag <logic:iterate /> tout en affichant la clé et sa valeur?
Si wi, est ce que vous pouvez me donnez un exemple ?
et Merci d'avance.
Bonjour tt le monde
Est ce qu'on peut iterer une liste Map avec la tag <logic:iterate /> tout en affichant la clé et sa valeur?
Si wi, est ce que vous pouvez me donnez un exemple ?
et Merci d'avance.
Essaie ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <table> <logic:iterate name="nomDuFormBean" property="uneMap" id="item"> <tr> <td><bean:write name="item" property="key"/></td> <td><bean:write name="item" property="value"/></td> </tr> </logic:iterate> </table>
Voila ce que j'ai fait :
ma bean :
et Ma jsp est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 package myPack; import java.util.Map; public class MyBean { private Map myMap; public void setMyMap(Map m){ myMap=m; } public Map getMyMap(){ return myMap; } }
mais une erreur se produit :
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
36
37
38
39
40
41
42
43
44
45
46 <%@ page language="java" pageEncoding="UTF-8"%> <%@ page import="java.util.Map" %> <%@ page import="java.util.HashMap" %> <%@ page import="myPack.MyBean" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-template" prefix="template" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-nested" prefix="nested" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html:html locale="true"> <head> <html:base /> <title>MyJsp.jsp</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> <% MyBean bean=new MyBean(); Map myMap=new HashMap(); myMap.put(new Integer(1),"One"); myMap.put(new Integer(2),"Two"); myMap.put(new Integer(3),"Three"); bean.setMyMap(myMap); %> <table> <logic:iterate name="MyBean" property="myMap" id="liste"> <tr> <td> <bean:write name="liste" property="key"/>:<bean:write name="liste" property="value"/> </td> </tr> </logic:iterate> </table> </body> </html:html>
javax.servlet.ServletException: Cannot find bean MyBean in any scope
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
org.apache.jsp.MyJsp_jsp._jspService(MyJsp_jsp.java:168)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
ton instance de MyBean s'appelle bean et non MyBean donc :
Code : Sélectionner tout - Visualiser dans une fenêtre à part MyBean bean=new MyBean();
Code : Sélectionner tout - Visualiser dans une fenêtre à part <logic:iterate name="bean" property="myMap" id="liste">
j'ai modifie mon code, mais la meme erreur sort :
javax.servlet.ServletException: Cannot find bean bean in any scope
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
org.apache.jsp.MyJsp_jsp._jspService(MyJsp_jsp.java:172)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
faut mettre le bean dans le scope page :
Code : Sélectionner tout - Visualiser dans une fenêtre à part pageContext.setAttribute("bean",bean) ;
Merci c_nvy maintenant mon code marche bien, mais juste une question pour l'affichage du contenu de mon map. Par exemple je veux affciher juste les values et que lorsque une value est nulle une ligne vide me genere.
voila ce que j'ai fait :
Mais ça me marche pas !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <logic:iterate name="MyBean" property="myMap" id="liste"> <tr> <td> <logic:empty name="liste" property="value"> <p> </logic:empty> <logic:notEmpty name="liste" property="value"> <bean:write name="liste" property="value"/> </logic:notEmpty> </td> </tr> </logic:iterate>
j'ai bien verfier, et ça marche bien, il n' y a pas de probleme. juste mon Map ne respecte pas l'ordre d'insertion.
l'or de l'affichge, les champs avec des key pairs s'affichent les premiers.
autre chose, si deux champs quise suivent ont des values null, une seule ligne vide qui se genere.
est ce qu'il ya une solution pour cela??
je m'explique par cet exemple que j'ai fait:
Code :
Normalement le resultat de j'attend est :
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 <body> <% MyBean bean=new MyBean(); Map myMap=new HashMap(); myMap.put("un_1","One"); myMap.put("deux_2","Two"); myMap.put("trois_3",""); myMap.put("quatre_4",""); myMap.put("cinq_5","Five"); bean.setMyMap(myMap); pageContext.setAttribute("bean",bean); %> <table> <tr> <td> <logic:iterate name="bean" property="myMap" id="liste"> <p><bean:write name="liste" property="key"/></p> </logic:iterate> </td> <TD> <logic:iterate name="bean" property="myMap" id="liste"> <logic:empty name="liste" property="value"> <p> </p> </logic:empty> <logic:notEmpty name="liste" property="value"> <p><bean:write name="liste" property="value"/></p> </logic:notEmpty> </logic:iterate> </TD> </tr> </table> </body>
mais ce que j'obtient est :un_1 One
deux_2 Two
trois_3
quatre_4
cinq_5 Five
Donc qu'est ce que je peux faire pour regler le probleme?cinq_5
quatre_4 Five
trois_3 One
un_1 Two
deux_2
Pour le moment je cherche pas l'ordre des champs, juste generer des lignes vides lorsque s'il s agit des values null.
et Merci d'avance.
Tes valeurs ne sont pas égales à null mais à blanc vu que tu les initialises avec "".
Essaie donc de faire le test avec les tags <logic:equal> et <logic:notEqual> :
Sinon, si tu veux que l'ordre d'insertion soit respecté, il faut utiliser une LinkedHashMap.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <logic:iterate name="MyBean" property="myMap" id="liste"> <tr> <td> <logic:equal name="liste" property="value" value=""> <p> </logic:equal> <logic:notEqual name="liste" property="value" value=""> <bean:write name="liste" property="value"/> </logic:notEqual> </td> </tr> </logic:iterate>
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager