且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

s:iterator输出key为一个对象,value为一个List集合的Map

更新时间:2022-08-28 10:48:11

情景:

前几天想用struts2的标签来迭代一些数据, 但一般都会用List来迭代, 这个很容易, 而且官方文档也有详细的例子。

Map<Topic, List<Item>>

我要迭代这个map, 在页面上显示。

  1. public class Topic{  
  2.    private Long id;  
  3.    private String title;  
  4.    //setter、getter方法省略  
  5. }  
  6. public class Item{  
  7.      private Long id;  
  8.      private String content;  
  9.      private Topic topic;  
  10.      //setter、getter方法省略  
  11. }  
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方法省略
}
  1. <s:iterator value="map" id="column">  
  2.      <s:property value="#column.key.title">  
  3.      <s:iterator value="#column.value">  
  4.             <s:property value="content">  
  5.       </s:iterator>  
  6. </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类添加一个属性:

  1. public class Topic{  
  2.      private Long id;  
  3.      private String title;  
  4.      private List<Item> items;  
  5.      //setter、getter方法省略  
  6. }  
public class Topic{
     private Long id;
     private String title;
     private List<Item> items;
     //setter、getter方法省略
}

这样就可以                   List<Topic>

  1. <s:iterator value="list">  
  2.      <s:property value="title">  
  3.      <s:iterator value="items">  
  4.             <s:property value="content">  
  5.       </s:iterator>  
  6. </s:iterator>  
<s:iterator value="list">
     <s:property value="title">
     <s:iterator value="items">
            <s:property value="content">
      </s:iterator>
</s:iterator>

这样使用的好处就是可以控制元素出现的顺序,不会像map一样。