情景:
前几天想用struts2的标签来迭代一些数据, 但一般都会用List来迭代, 这个很容易, 而且官方文档也有详细的例子。
Map<Topic, List<Item>>
我要迭代这个map, 在页面上显示。
- public class Topic{
- private Long id;
- private String title;
- //setter、getter方法省略
- }
- public class Item{
- private Long id;
- private String content;
- private Topic topic;
- //setter、getter方法省略
- }
public class Topic{ private Long id; private String title; //setter、getter方法省略 } public class Item{ private Long id; private String content; private Topic topic; //setter、getter方法省略 }
- <s:iterator value="map" id="column">
- <s:property value="#column.key.title">
- <s:iterator value="#column.value">
- <s:property value="content">
- </s:iterator>
- </s:iterator>
<s:iterator value="map" id="column"> <s:property value="#column.key.title"> <s:iterator value="#column.value"> <s:property value="content"> </s:iterator> </s:iterator>
但是上面这样的代码能够迭代出数据, 但是个人认为一般迭代map也许不是很好的办法。
因为map是不能够保证每次的排序都是有顺序的, 所以一般还是考虑用List代替Map。
将上面的Topic类添加一个属性:
- public class Topic{
- private Long id;
- private String title;
- private List<Item> items;
- //setter、getter方法省略
- }
public class Topic{ private Long id; private String title; private List<Item> items; //setter、getter方法省略 }
这样就可以 List<Topic>
- <s:iterator value="list">
- <s:property value="title">
- <s:iterator value="items">
- <s:property value="content">
- </s:iterator>
- </s:iterator>
<s:iterator value="list"> <s:property value="title"> <s:iterator value="items"> <s:property value="content"> </s:iterator> </s:iterator>
这样使用的好处就是可以控制元素出现的顺序,不会像map一样。