情景:
前几天想用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一样。