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的含义了!
有哪位高手路过,请解释一下!谢谢