OGNL表达式语言: (Action将数据放入其中,JSP页面可从中取出数据)
基本语法
#bar.foo.blah(如果需要访问的属性属于根对象,则可直接访问该属性,如blah,否则必须使用一个对象名作为前缀修饰该属性,#bar.blah)
属性访问器:
Struts提供了一个特殊的OGNL PropertyAccessor(属性访问器),它可以自动搜寻Stack Context所有实体(从上而下),直到找到与求值表达式匹配的属性
例:Stack Context中包含两个根实例:animal和person,这两个实例都包含"name"属性,而animal实例还有一个"species"属性,person实例还有一个"salary"属性,其中animal实例是栈顶元素,而person实例在其后面
species (返回animal.getSpecies()方法的返回值)
salary (返回person.getSpecies()方法的返回值)
name (因为Struts2先找到animal实例,返回animal.getName()方法返回值)
如果想取得person实例的name属性:
#person.name
也可通过索引:
[0].name (从第一个开始找,先找到animal实例,所以返回animal.getName())
[1].name (从第二个开始找,先找到person实例,所以返回person.getName())
OGNL中集合的操作:
创建List:
{e1,e2,e3,...}
创建Map:
#{key1:value1,key2:value2,...}
运算符:
in (判断某个元素是否在集合中)
not in (判断某个元素是否不再集合中)
取的子集:
? (取出所有符合选择逻辑的元素)
^ (取出符合逻辑的第一个元素)
$ (取出符合逻辑的最后一个元素)
例:
person.relatives.{? #this.gender == 'male'}
(取出person的所有性别为male的relatives集合)
访问静态成员:(OGNL提供了一种可以访问静态成员的方式)
要使用该功能需开启:
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
一旦开启,OGNL就可通过如下方式访问:
@className@staticField
@className@staticMethod(val...)
例:
访问系统环境变量:
<s:property value="@java.lang.System@getenv('JAVA_HOME')"/>