首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Struts2学习之Ognl表达式(1)

2012-09-09 
Struts2学习之Ognl表达式(一)一,属性方法的访问1,访问属性s:property valueuser.uname/s:property v

Struts2学习之Ognl表达式(一)
一,属性方法的访问
  1,访问属性
    <s:property value="user.uname"/>
    <s:property value="user.address.uname"/>----地址访问,也就是在user里面有一个address的引用,uname是address的属性
 
  2,访问方法
    --访问值栈中的方法
    <s:property value="user.getName()"/> 
    <s:property value="'sss'.length()"/>---拿到字符串"sss"的长度
    --访问静态属性和方法
      --调用Action中的静态方法
         <s:property value="@com.symjie.action.HomeActiom@GetCount()"/>
      --调用jdk中的静态方法
         <s:property value="@java.lang.Math@floor(44.56)"/>
      --调用普通类中的静态属性
<s:property value="@com.symjie.vo.User@GetValue"/>
      --调用普通类中的静态方法
        在调用普通类中的静态方法有以下注意点:
1,在struts2.0中可以直接调用
   @com.symjie.vo.User@GetValue()
2,在struts2.1版中以后就不能直接调用,因为在default.properties中默认情况下是这样设置的
   ### Whether to allow static method access in OGNL expressions or not
   struts.ognl.allowStaticMethodAccess=false
   那么如果要访问个方法,有以下解决方法
   1,在struts.xml中增加节点
      <content name="struts.ognl,allowStaticMethodAccess" value="true"></content>
   2,重写default-properties中的这个属性
      在src中建立struts.properties文件,内容如下
               ###允许普通了访问静态方法
       struts.ognl.allowStaticMethodAccess=true
           当然,在default.properties中的key/value属性可以在struts.xml中的<content>节点设置
    --访问普通类中的构造方法
      <s:property value="new com.symjie.vo.User('symjie',20).getName()"/>
  3,访问数组
    1,获取List
       <s:property value="@com.symjie.vo.User@GetList()"/>---打印结果:[0,1,2,3,4,5,6,7,8,9]
    2,获取List中某一个元素(可以使用类似于数组中的下标获取List中的内容)
       <s:property value="@com.symjie.vo.User@GetList()[2]"/>---打印结果为2
    3,遍历List中的元素
       <s:iterator value="@com.symjie.vo.User@GetList()" id="item">
<s:property value="item"/>
       </s:iterator>
    4,获取Set
       <s:property value="@com.symjie.vo.User@getSet()"/>---打印结果:[3, 2, 1, 0, 7, 6, 5, 4, 9, 8]
    5,遍历Set中的元素
       <s:iterator value="@com.symjie.vo.User@getSet()" id="item">
<s:property value="item"/>
       </s:iterator>
       注意:由于Set集合是无序的集合,所以不能同过索引的形式访问某一个元素
    6,获得Map
       <s:property value="@com.symjie.vo.User@getMap()"/>---打印结果
    7,获取Map中所有的键
       <s:property value="@com.symjie.vo.User@getMap().keys"/>
    8,获取Map中所有的值
       <s:property value="@com.symjie.vo.User@getMap().values"/>
    9,获取Map中的某一个元素(可以使用类似于数组中的下标获取List中的内容)
       <s:property value="testMap['m1']"/>
    10,获取List,et,Map的大小
       <s:property value="List/Set/Map.size"/>
以上笔记,在做测试的时候没有使用action,直接使用vo里面的静态方法。
疑问:
由于使用的是直接数据,在List,Set,Map中放的是[0...9]。但是在遍历的时候出现了一个疑问
<s:iterator value="@com.symjie.vo.User@GetList()" id="item">
<s:property value="item"/>
</s:iterator>
在iterator中id的理解,如果id值的是集合里面的元素,那么上面写法可以理解,并且也能够顾正确执行。
如果在iterator中不写id那么也可以访问:
<s:iterator value="@com.symjie.vo.User@GetList()">
<s:property/>
</s:iterator>
所以,在这里,我不是很明白iterator中id的含义了!
有哪位高手路过,请解释一下!谢谢

热点排行