jstl 显示 Map>的问题。

pressman 2008-12-03 10:30:13
我在jsp页面取得了一个Map<String, List<String>>类型的对象,想在<table>里显示出来如下:

key1 key2 key3 key...
value1ofkey1 value1ofkey2 value1ofkey3 ...
value2ofkey1 value2ofkey2 value2ofkey3 ...
value3ofkey1 value3ofkey2 value3ofkey3 ...
... ... ... ...

写了半天,写不出来,请赐教!!

我这样写的,是错的
<table id="tableId" width="100%" cellspacing="1" cellpadding="3" bgcolor="#666666">
<tr>
<c:forEach items="${DataCache}" var="DataCache">
<td>${DataCache.key} </td>
</c:forEach>
</tr>
<c:forEach items="${DataCache}" var="DataCache">

<c:forEach items="${DataCache.value}" var="DataCacheValue" varStatus="state">
<tr <c:if test="${state.index%2!=0}">bgcolor="#DAECED"</c:if>>
<td bgcolor="#ffffff">${DataCacheValue}</td>
</tr>
</c:forEach>
</c:forEach>
</table>
...全文
634 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunwei_07 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pressman 的回复:]
to sunwei_07 :
你也是用 <br>分割数据的,不好。


我想用 <tr> <td>这样来分隔数据,不用 <br>,因为和其他网页要保持风格一致呀!!
大家帮帮忙
[/Quote]

汗,你在里面加个table。用tr循环不就OK了
zou_wei_forever 2008-12-03
  • 打赏
  • 举报
回复
这样在页面只要显示就可以了,比如:List list = new Arraylist();
list.add("1");
list.add("2");
list.add("3");
List list2 = new Arraylist();
list.add("4");
list.add("5");
list.add("6");
List list3 = new Arraylist();
list.add("7");
list.add("8");
list.add("9");


map.put("1",list);
map.put("2",list2);
map.put("3",list3);
这样页面显示可能这样:
1 2 3
4 5 6
7 8 9
但是,你这样加入的话:
List list = new Arraylist();
list.add("1");
list.add("4");
list.add("7");
List list2 = new Arraylist();
list.add("2");
list.add("5");
list.add("8");
List list3 = new Arraylist();
list.add("3");
list.add("6");
list.add("9");

显示出来就是这样了:
1 4 7
2 5 8
3 6 9
zou_wei_forever 2008-12-03
  • 打赏
  • 举报
回复
可不可以将value1ofkey1 value1ofkey2 value1ofkey3 ...
value2ofkey1 value2ofkey2 value2ofkey3 ...
value3ofkey1 value3ofkey2 value3ofkey3
这些值在加入到list之前就计算好啊?比如:if(i==0) list1.add("...")else if(i==2)list2.add("...");
那个判断条件自己写,只给个思路!
海会圣贤 2008-12-03
  • 打赏
  • 举报
回复
换在<tr></td>不就行了,格式自己调一下
pressman 2008-12-03
  • 打赏
  • 举报
回复
to sunwei_07 :
你也是用<br>分割数据的,不好。


我想用<tr><td>这样来分隔数据,不用<br>,因为和其他网页要保持风格一致呀!!
大家帮帮忙
sunwei_07 2008-12-03
  • 打赏
  • 举报
回复
java:
try {
ArrayList list = new ArrayList();

list.add("value1");
list.add("value2");

ArrayList list2 = new ArrayList();

list2.add("value2-1");
list2.add("value2-2");

HashMap map = new HashMap();

map.put("key1", list);
map.put("key2", list2);

request.setAttribute("map", map);
} catch (Exception e) {
e.printStackTrace();
}

jsp:

<table border="1">
<tr>
<c:forEach var="m" items="${map}">
<td>
<table>
<tr>
<td>
<c:out value="${m.key}"/>
</td>

</tr>
<tr>
<Td>
<c:forEach var="mm" items="${m.value}">
<c:out value="${mm}"/>
<br>
</c:forEach>
</Td>
</tr>
</table>
</td>
</c:forEach>
</tr>
</table>

效果:
key1 key2
value1 value2-1
value2 value2-2



pressman 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zou_wei_forever 的回复:]
假设:List list2 = new Arraylist();
List list3 = new ArrayList();
...
Map map = new HashMap();
map.put("1",list2);
map.put("2",list3);
...
则:
<c:forEach items="${map}" var="mymap" >
<c:forEach items="${mymap.value}" var="xxx">
${xxx}
</c:forEach>
</c:forEach>
[/Quote]
to zou_wei_forever :
我不是问如何显示出来的问题,我是问数据如何用问题中的格式显示,
zou_wei_forever 2008-12-03
  • 打赏
  • 举报
回复
其中mymap.value取到的就是Map <String, List <String>>中的List,如果要用到key,就用mymap.key
zou_wei_forever 2008-12-03
  • 打赏
  • 举报
回复
假设:List list2 = new Arraylist();
List list3 = new ArrayList();
...
Map map = new HashMap();
map.put("1",list2);
map.put("2",list3);
...
则:
<c:forEach items="${map}" var="mymap" >
<c:forEach items="${mymap.value}" var="xxx">
${xxx}
</c:forEach>
</c:forEach>
pressman 2008-12-03
  • 打赏
  • 举报
回复
走开了一会,就这么多回复,我试下。
seaman_ 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sunwei_07 的回复:]
java:
try {
ArrayList list = new ArrayList();

list.add("value1");
list.add("value2");

ArrayList list2 = new ArrayList();

list2.add("value2-1");
list2.add("value2-2");

HashMap map = new HashMap();

map.put("key1", list);
map.put("key2", list2);

request.setAttribute("map", map);
} catch (Exception e) {
e.printStackTrace();
}

jsp:

<table border="1">

[/Quote]


<table border="1">
<tr>
<c:forEach var="m" items="${map}">
<td>
<table>
<tr>
<td>
<c:out value="${m.key}"/>
</td>

</tr>
<c:forEach var="mm" items="${m.value}">
<tr><td>
<c:out value="${mm}"/>
</td></tr>
</c:forEach>
</table>
</td>
</c:forEach>
</tr>
</table>
LeayAo 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sunwei_07 的回复:]
引用 5 楼 pressman 的回复:
to sunwei_07 :
你也是用 <br>分割数据的,不好。


我想用 <tr> <td>这样来分隔数据,不用 <br>,因为和其他网页要保持风格一致呀!!
大家帮帮忙


汗,你在里面加个table。用tr循环不就OK了
[/Quote]

貌似这个也不错。。多用几个table..是可以解决的
LeayAo 2008-12-03
  • 打赏
  • 举报
回复
首先你那几个列表应该是等长的,不然没法这样格式罗列
然后就用同一个循环
假设:List list2 = new Arraylist();
List list3 = new ArrayList();
...
Map map = new HashMap();
map.put("1",list2);
map.put("2",list3);
...
则:
<c:forEach items="${map}" var="mymap" >
var1=list1;

</c:forEach>
先把list全部取出来,共用一个循环读出

<c:forEach items="${mymap.value}" var="xxx" varStatus="i">
<tr>
<td>${var1[i]} </td><td>${var2[i]} </td>
</tr>
</c:forEach>

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧