OGNL表达式语言

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属性:

扫描二维码关注公众号,回复: 616597 查看本文章

#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')"/>

 

猜你喜欢

转载自betterthisworld.iteye.com/blog/2087840