轻量级JavaEE企业应用实战(十三)

来源:互联网 发布:录制屏幕软件使用 编辑:程序博客网 时间:2024/04/29 11:41

OGNL表达式

传统的OGNL表达式求职中,系统会假设只有一个根对象;如果系统的Stack Context中包含两个对象:foo对象,它在Context中的名字为foo; bar对象,它在Context中的名字是bar,并将foo对象设置成Context的根对象

//返回foo.getBlah();方法返回值#foo.blah//返回bar.getBlah();#bar.blah//foo是根对象,默认是取得foo对象的blah属性#blah

通过索引访问Stack Context中的对象

Stack Context包含两个根实例:animal实例是栈顶元素,person实例在后

//animal.getName();[0].name//person.getName();[1].name

Struts2使用标准的Context来进行OGNL表达式的求值,这个对象就是一个Map的实例类型,其根对象是ValueStack,可以通过以下方式获取ValueStack里的属性

${bar}

OGNL中的集合操作

使用OGNL表达式可以直接创建集合

List : {e1, e2, e3}Map : #{key1:value1, key2:value2}

OGNL表达式提供了两个运算符:in、not in,in判断某个元素是否在指定集合中;not in相反

示例:<s:if test=" 'foo' in {'foo', 'bar'}">    包含</s:if><s:else>    不包含</s:else>

除此之外,OGNL还允许通过某个规则取得集合的子集。

? : 取出所有符合选择逻辑的元素^ : 取出符合选择逻辑的第一个元素$ : 取出符合逻辑的最后一个元素person.relatives.{? #this.gender == 'male'}意义:取出person的所有性别为male的relatives(亲戚)集合

访问静态成员

想要OGNL表达式访问静态成员<constant name="struts.ognl.allowStaticMethodAccess"   value="true" />设置上边的常量,OGNL表达式可以通过如下访问静态成员@className@staticField@className@staticMethod(val...)在JSP页面<s:property value="@java.lang.System@getenv('JAVA_HOME')" /><s:property value="@java.lang.Math@PI" />

Lambda表达式

OGNL表达式支持基本的Lambda表达式,可以使用一些简单的函数

假设有下斐波那契数列if n==0 return 0;elseif n==1 return 1;else return fib(n-2)+fib(n-1)<s:property value="#fib =: [#this==0? 0: #this==1? 1:  #fib(#this-2) + #fib(#this-1)], #fib(11)" />
0 0
原创粉丝点击