利用投影获取属性
利用投影获取List中对象的username属性时,其中{}表示的是一个集合.stus.{username}就表示将suts中所有的username属性取出组成一个新的列表
利用选择获取属性
OGNL表达式是很灵活的,可以同时使用选择技术与投影技术获取属性.
使用选择技术时,#this代表当前元素,问号?是把所有满足条件的元素都取出来.
上箭头是开始的意思,所以stus.{#this.grade>=60}.{username}输出的是[张三].
注意,此时输出文本中包含中括号,这表示它是一个列表,而stus.{?#this.grade>=60}.{username}[0]输出的是张三,是字符串,二者是不同的.
美元符号$是结束的意思,所以stus.{$#this.grade>=60}.{username}输出的是[王五]
这三个符合:问号、上箭头、美元符所返回的都是List.
补充
1.当OGNL取不到值的时候,它不会报错,而是什么都不显示.
<s:property value="[0]"/>
返回的是ValueStack中从上至下的所有的Object.
<s:property value="[1]"/>
返回的是ValueStack中从上至下的第二个Object.
<s:property value="[0].username"/>
返回的是成员变量username的值.假设ValueStack中存在两个Action的话,如果第一个Action如果没有username变量,那么它会继续找第二个Action。那么在什么情况下ValueStack中会存在两个Action呢? 答案是在struts.xml中配置的是从一个Action通过
<result type="chain">
跳转到另一个Action时。
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
在Struts2.1.6中必须设置struts.ognl.allowStaticMethodAccess为true之后,才允许使用OGNL访问静态方法。而在Struts2.0.11则无需设置,即可直接访问.