OGNL(Object-Graph Navigation Language)
1.访问值栈中的普通属性:
<s:property value="xxx"/>
<s:property value="xxx.xx"/>
直接写值栈中的键名称或加上属性。访问属性的前提是这个对象必须有get/set方法。
聚合关系的对象也可以访问或访问其属性。
2.访问对象的普通方法
如:
<s:property value="name.length()"/>
<s:property value="dog.wangwang()"/>
<s:property value="m()"/>
3.访问静态方法或属性
必须在配置文件中加入常量配置
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
访问静态方法,如:
<s:property value="@com.xx.xx.lei@fangfa()"/>
访问静态属性,如:
<s:property value="@com.xx.xx.lei@XXX"/>
都是@号加类全称+方法名或属性名。
访问Math类的静态方法:<s:property value="@@max(2,3)"/>
4.访问普通类的构造方法
如:
<s:property value="new com.xx.xx.User(8)"/>
5.访问集合
如:
访问List或数组:
<s:property value="users"/>
<s:property value="users[1]"/>
访问List中元素某个属性的集合:
<s:property value="users.{age}"/>就是在users集合中,拿出user的属性age,组成
一个新的集合。
<s:property value="users.{age}[0]"/>就是访问第一个元素。
6.访问Set,不能取下标,因为Set是无序的。
7.访问map:
访问Map中的某个元素
<s:property value="xxmap.keyname"/>
或<s:property value="xxmap['keyname']"/>
或<s:property value="xxmap[\"keyname\"]"/>
访问map中所有key:
<s:property value="xxmap.keys"/>
访问map中所有value:
<s:property value="xxmap.values"/>
访问容器的大小
<s:property value="xxmap.size()"/>
或<s:property value="xxmap.size"/>
8.投影:
投影(过滤):
<s:property value="users.{?#this.age==1}"/>
问号为正则表达式内容,就是只要是匹配的都包括。就是这个users集合,循环拿出每一个对象,看这个对象的age属性是否等于1的,组成一个
集合。如:
<s:property value="users.{?#this.age==1}.{age}[0]"/>拿出集合中第一项。
<s:property value="users.{?#this.age==1}.{age}"/>拿出集合中age的集合。
投影2:<s:property value="users.{^#this.age>1}"/>
小尖号代表头一个,就是拿出users过滤后的集合中的第一个user对象的集合,注意,是集合。
投影3:<s:property value="users.{$#this.age>1}"/>
$号代表尾一个,就是拿出users过滤后的集合中的最后一个个user对象的集合,注意,是集合。
9.用中括号访问值栈元素:
<s:property value="[0]"/>
就是访问值栈中,从栈顶开始查找元素。