《深入浅出struts2》--第七章,类型转换-支持与Map一起使用

本文详细介绍了在Struts2框架中如何遍历Map容器,包括基本的访问方式、获取所有键值对、数组处理、对象值迭代等方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

struts2 遍历Map的多种方法

主要针对以下几种情况的Map:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.expre.struts2.bean.Person;
import com.expre.struts2.bean.Phone;
import com.opensymphony.xwork2.ActionSupport;

public class ExpressMapAction extends ActionSupport {
    private static final long serialVersionUID = -4251480679223607716L;

    private Map<String, String> strMap = new HashMap<String, String>();

    private Map<String, Person> perMap = new HashMap<String, Person>();

    private Map<String, String[]> strArryMap = new HashMap<String, String[]>();

    private Map<String, List<Person>> perLstMap = new HashMap<String, List<Person>>();

 //get&set方法,这里都省略了

 @Override
 public String execute() throws Exception {

  // 值为字符串
  strMap.put("first", "zxx");
  strMap.put("second", "lsx");
  strMap.put("third", "wxh");

  // 值为javabean对象
  Person person = new Person("001", "zxx", 22);
  person.setPhone(new Phone("apple", 18957157189L));

  perMap.put("one", person);

  person = new Person("002", "lsx", 25);
  person.setPhone(new Phone("HTC", 18957157187L));
  perMap.put("two", person);

  // 数组处理
  strArryMap.put("arr1", new String[] { "1", "310000", "hz" });
  strArryMap.put("arr2", new String[] { "2", "310001", "xh" });
  strArryMap.put("arr3", new String[] { "3", "310002", "sc" });

  //list对象处理
  List<Person> list=new ArrayList<Person>();  
  list.add(new Person("001", "zxx", 22));
  list.add(new Person("002", "lsx", 25));
  perLstMap.put("one", list);

  list=new ArrayList<Person>();  
  list.add(new Person("003", "wlx", 26));
  list.add(new Person("004", "hzx", 28));
  perLstMap.put("two", list);

  return "result";
 }
}

<html>
 <body>
  <ul>
   <li>访问Map:<s:property value="strMap"/></li>
   <li>访问Map中某个元素:
    <s:property value="strMap.first"/> |
    <s:property value="strMap['second']"/> |
    <s:property value="strMap[\'third\']"/>
   </li>
   <li>访问Map中所有的key:<s:property value="strMap.keys"/></li>
   <li>访问Map中所有的value:<s:property value="strMap.values"/></li>
   <li>访问容器的大小:
    <s:property value="strMap.size()"/> |
    <s:property value="strMap.size"/>//这是map特别的地方
    </li>

    <li>迭代循环取值,最简单
     <s:iterator value="strMap" id="entry">
       <s:property value="#entry"/>{
        key: <s:property value="key"/> 
      value:<s:property value="value"/>}|
       </s:iterator>
      </li>

    <li>迭代循环取值
     <s:iterator value="strMap.keySet()" id="key">
       <s:property value="key"/><s:property value="#key"/>:
           <s:if test="strMap[#key]!=null"> 
            <s:property value="strMap.get(#key)"/> |
           </s:if>
       </s:iterator>
      </li>

      <li>迭代循环取数组值
     <s:iterator value="strMap" id="entry">
       <s:property value="#entry"/>{
       <s:property value="value[0]"/> 
       <s:property value="value[1]"/>  |
       <s:property value="value[2]"/>  }
       </s:iterator>
      </li>

      <li>迭代循环取对象值,最直接:
       <ul>
       <s:iterator value="perMap" id="entry">   
        <li>
          <s:property value="#entry"/>  {
         ID:<s:property value="value.ID"/> 
         Name:<s:property value="value.name"/> 
         Age:<s:property value="value.age"/>  }|
         </li>
       </s:iterator>
       </ul>
      </li>

      <li>迭代循环取对象的属性值
    <s:iterator value="perMap.keySet()" id="key">
          <s:property value="#key"/>:
           <s:iterator value="perMap.get(#key)">
               <s:property value="ID"/>
               <s:property value="name"/>
               <s:property value="phone.name"/>
           </s:iterator>|
      </s:iterator>
      </li>

      <li>稍复杂的迭代
       <s:iterator value="perLstMap" id="entry">  
        <s:set name="total" value="#entry.value.size"/>  
        <s:iterator value="#entry.value" status="s">  
           <s:if test="#s.first">
            <s:property value="#entry.key"/>:共${total}条
           </s:if>   {
           <s:property value="ID"/>  |
           <s:property value="name"/>   |
           <s:property value="age"/>
            };
        </s:iterator>  
     </s:iterator> 
   </li>
   </ul>
 </body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值