ognl object-graph navigation language
ognl表达式
a)可以取值栈中action的普通属性
例如 <s:property value="username" /> 这个表达式就能取出值栈中的username的值
b)可以去值栈中对象的普通属性值
例如
1、 <s:property value="user.age" /> user 为一个对象user.age 中的user对象,只有前台向后台传值,才会构造,不过也可以自己手动new ,不过要有无参数的构造 函数
2、<s:property value="username.length" /> username是string型的,有length方法,所以可以这么写
c)可以访问action的普通方法
例如:<s:property value="m()" /> 而max是action中的一个普通方法,这里显示的值即为m()方法的返回值
d)可以访问静态方法
例如:<s:property value="@com.bjsxt.struts2.ognl.S@s()" /> 而max是action中的一个普通方法,这里显示的值即为max()方法的返回值
e)可以访问静态属性
例如:
1、<s:property value="@com.bjsxt.struts2.ognl.S@STR" /> 而max是action中的一个普通方法,这里显示的值即为max()方法的返回值
2、<s:property value="@@max(2,3)" /> 用两个@表示在math 这个类,且仅仅是这一个类里面的math方法
f)访问list
例如:
1、<s:property value="users" /> 得到users这个list 里面所有的值
2、 访问list中的某个元素
<s:property value="users[1]" /> 得到users这个list中第二个值
3、访问某个元素某个属性的集合
<s:property value="user.{age}" /> 得到users这个list中所有age的值集合
4、访问list中元素的某个属性集合中的特定值
<s:property value="user.{age}[0]" /> 或者<s:property value="user[0].age" /> 取得users这个list中所有age集合中第一个值
g)访问map
1、<s:property value="dogMap" /> 得到整个dog这个map
2. 访问map里面某个元素
<s:property value="dogMap.dog101" /> 得到整个dog这个map
3.访问map里面所有的keys
<s:property value="dogMap.keys"/>
4.访问map里面所有的values
<s:property value="dogMap.values"/>
5.访问容器大小
<s:property value="dogMap.size()"/>
h)投影
投影(过滤):
<s:property value="users.{?#this.age==1}[0]" ?# 为过滤条件写法 this.age为迭代,集合的每个元素进行迭代,取出age=1的所有元素
<s:property value="users.{^#this.age==1}[0]" ?# 为过滤条件写法 this.age为迭代,集合的每个元素进行迭代,取出age=1的所有元素中的第一个
<s:property value="users.{$#this.age==1}[0]" ?# 为过滤条件写法 this.age为迭代,集合的每个元素进行迭代,取出age=1的所有元素中的最后一个
i)[]取值
<s:property value="[0].dogMap.dog101"/> [0] 表示在堆栈里面所有的action