【Struts2五】ValueStack以及ognl表达式三(iterator标签详解)

ognl表达式之使用iterator迭代ValueStack中的可迭代元素(集合,map,数组。。)

1.在ValueStack中放入数据:
public  class IteratorAction extends ActionSupport{
      /**
      * 1.把一个list放入到map栈中迭代
      */
      public  String putListToMap(){
          List<Person> personList =  new ArrayList<Person>();
          Person p1 =  new Person();
          p1.setPid(  "1");
          p1.setUsername(  "p1");
          
          Person p2 =  new Person();
          p2.setPid(  "2");
          p2.setUsername(  "p2");
          
          personList.add(p1);
          personList.add(p2);
          
          ActionContext. getContext().put( "pList" , personList);
          
            return "list_map" ;
     }
     
      /**
      * 2.把一个list放入到对象栈的栈顶
      */
      public  String putListToObjStack(){
          List<Person> personList =  new ArrayList<Person>();
          Person p1 =  new Person();
          p1.setPid(  "1");
          p1.setUsername(  "p1");
          
          Person p2 =  new Person();
          p2.setPid(  "2");
          p2.setUsername(  "p2");
          
          personList.add(p1);
          personList.add(p2);
          
          ActionContext. getContext().getValueStack().push(personList);
          
            return "list_objstack" ;
     }
     
      /**
      * 3.把map存放在map栈中
      */
      public  String putMapToMap(){
          Map<String, Person> map =  new HashMap<String, Person>();
          Person p1 =  new Person();
          p1.setPid(  "1");
          p1.setUsername(  "p1");
          
          Person p2 =  new Person();
          p2.setPid(  "2");
          p2.setUsername(  "p2");
          
          map.put(  "m1", p1);
          map.put(  "m2", p2);
          
          ActionContext. getContext().put( "map" , map);
            return "map_map" ;
     }
     
      /**
      * 4.map栈中迭代Object[]
      */
      public  String putObjectsToMap(){
          
          Object[] objs =  new Object[2];
          
          Person p1 =  new Person();
          p1.setPid(  "1");
          p1.setUsername(  "p1");
          
          Person p2 =  new Person();
          p2.setPid(  "2");
          p2.setUsername(  "p2");
          
          objs[0] = p1;
          objs[1] = p2;
          ActionContext. getContext().put( "objs" , objs);
            return "objs_map" ;
     }
     
      /**
      * 5.将List<List<Person>>放于map栈中;
      */
      public  String putListlistToMap(){
          List<List<Person>> lists =  new ArrayList<List<Person>>();
          List<Person> personList1 =  new ArrayList<Person>();
          List<Person> personList2 =  new ArrayList<Person>();
          Person p1 =  new Person();
          p1.setPid(  "1");
          p1.setUsername(  "p1");
          
          Person p2 =  new Person();
          p2.setPid(  "2");
          p2.setUsername(  "p2");
          
          personList1.add(p1);
          personList2.add(p2);
          
          lists.add(personList1);
          lists.add(personList2);
          
          ActionContext. getContext().put( "lists" , lists);
          
            return "listlist_map" ;
     }
     
      /**
      * 6.将Map<String,List<Person>>放于map栈中迭代
      */
      public  String putMaplistToMap(){
          List<Person> personList1 =  new ArrayList<Person>();
          List<Person> personList2 =  new ArrayList<Person>();
          Person p1 =  new Person();
          p1.setPid(  "1");
          p1.setUsername(  "p1");
          
          Person p2 =  new Person();
          p2.setPid(  "2");
          p2.setUsername(  "p2");
          
          personList1.add(p1);
          personList2.add(p2);
          Map<String, List<Person>> map =  new HashMap<String, List<Person>>();
          map.put(  "list1", personList1);
          map.put(  "list2", personList2);
          ActionContext. getContext().put( "map" , map);
          
            return "maplist_map" ;
     }
     
      /**
      * List<Map<String,Person>>
      * List<List<Map<String,Person>>>
      * List<Map<String,List<Preson>>>
      */
     
      /**
      * 7.将List<Map<String,Person>>放于map栈中;
      */
     
      public  String putListmaptoMap(){
          List<Map<String, Person>> mapList=  new ArrayList<Map<String,Person>>();
          Map<String, Person> map1=  new HashMap<String, Person>();
          Map<String, Person> map2=  new HashMap<String, Person>();
          
          map1.put(  "p1", new Person("zhangsan" , "1" ));
          map1.put(  "p2", new Person("lisi" ,"2" ));
          
          map2.put(  "p3", new Person("zhangsan2" , "111" ));
          map2.put(  "p4", new Person("lisi2" ,"211" ));
          
          mapList.add(map1);
          mapList.add(map2);
          
          ActionContext. getContext().put( "maplist" , mapList);
            return "listmap_map" ;
     }
     
}


2.在jsp页面使用标签获取集合中的数据:

      < table  >
            <!--
              iterator是迭代标签
                 value 直接跟 ognl表达式
                 iterator当前正在迭代的元素在栈顶
                       如果当前正在迭代的元素已经迭代完毕,则该对象会从栈顶删除
                      如果value属性不写,默认迭代栈顶的元素
           -->
            <!--
               1. List<Person> list在 map栈
            -->
            
            <s:iterator value= "#pList">
                <s:property/>
                <tr>
                     <td>
                          <s:property value= "pid"/>
                     </td>
                     <td>
                          <s:property value= "username"/>
                     </td>
                </tr>
            </s:iterator>
          
            <!--
              2.List<Person>  list在对象栈
           -->
     
            <s:iterator>
                <tr>
                     <td>
                          <s:property value= "pid"/>
                     </td>
                     <td>
                          <s:property value= "username"/>
                     </td>
                </tr>
            </s:iterator>
          
            <!--
               3.把Map<String,Person>放到map栈中;
            -->
          
            <s:iterator value= "#map">
                 <s:debug></ s:debug>
                 <tr>
                     <td>
                          <s:property value="key" />, <s:property value= "value.pid"/>
                     </td>
                     <td>
                          <s:property value="key" />, <s:property value= "value.username"/>
                     </td>
                </tr>
            </s:iterator>
          
             <!--
                    4.将Object[]放于map栈中
             -->
            
              <s:iterator value= "#objs">
                      <tr>
                          <td>
                               <s:property value= "pid"/>
                          </td>
                          <td>
                               <s:property value="username" />
                          </td>
                     </tr>
              </s:iterator>
             
              <!--
                    5.迭代map栈中的List<List<Person>>
              -->
            
               <s:iterator value= "#lists">
                 <!--
                    因为当前正在迭代的元素在栈顶,所以不需要写value的值
                -->
                
                 <s:iterator>
                      <tr>
                          <td>
                               <s:property value= "pid"/>
                          </td>
                          <td>
                               <s:property value="username" />
                          </td>
                     </tr>
                 </s:iterator>
               </s:iterator>
              
                <!--
                    6.迭代map栈中的Map<String,List<Person>>
                -->
                <s:iterator value= "#map">
                      <s:property value= "key"/>
                      <s:iterator value= "value">
                          <s:property value= "pid"/>
                          <s:property value= "username"/> 
                      </s:iterator>
                </s:iterator>
              
                  <!--
                    7.迭代map栈中的List<Map<String,Person>>
                -->
               <s:iterator value= "#maplist">
                 <s:iterator>
                    key:  <s:property value= "key"/>
                     pid: < s:property  value="value.pid"/>
                    name:  <s:property value="value.username" />
                      <br/>
                 </s:iterator>
               </s:iterator>
              
      </ table  >




将List<User>放入map栈中,Person里有hobbies集合!
1.User:
      private  String id;
      private  String username;
      private  String password;
      private  String email;
      private  String phone;
      private  List<Hobby> hobbies;

2.Hobbies:
      private  String id;
      private  String name;

将集合放入map栈中:
ActionContext.getContext().put( "userList" , userList);

在页面迭代显示:
      < table  border="1px">
            <tr>
                <th> 用户id</th >
                <th> 用户名</th >
                <th> 邮箱</th >
                <th> 手机</th >
                <th> 爱好</th >
            </tr>
          
            <s:iterator value= "#userList" >
                <tr>
                     <td>< s:property value ="id" /></td >               
                     <td>< s:property value ="username" /></td>            
                     <td>< s:property value ="phone"/></ td>
                     <td>< s:property value ="email"/></ td>               
                             
                     <td>
                          <s:iterator value= "hobbies">
                               <s:property value= "name"/>
                          </s:iterator>
                     </td>              
                </tr>
                <s:debug></ s:debug>
            </s:iterator>
      </ table  >

总结,当前正在迭代的元素在对象栈栈顶,使用<s:iterator > 标签时,不指定value,那么默认迭代的就是栈顶的集合,如果需要迭代的集合位于对象栈,但不是栈顶,使用value="xx"来指定;如果需要迭代的元素位于map'栈,使用value="#xx"来指定!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值