OGNL获取Context中的对象中的属性的方法很简单:person.name就可以获取person对象的name属性的值。OGNL会从当前valueStack开始查找所要求的属性,一直往上层查找,直到找到为止。
除此之外,Struts2还提供了一些命名对象,它们存在于Stack Context中,所以访问这些对象时需要使用#前缀来指明。
1,parameters对象,用于访问HTTP请求参数。如#parameters['foo']或#parameters.foo,用于返回调用HttpServletRequest.getParameter("foo")的返回值。
2,request对象,用于访问HttpServletRequest的属性。如#request['foo']或#request.foo,用于返回调用HttpServletRequest.getAttribute("foo")的返回值。
3,session对象,用于访问HttpSession的属性。如#session['foo']或#session.foo,用于返回调用HttpSession.getAttribute("foo")的返回值。
4,application对象,用于访问ServletContext的属性。如#application['foo']或#application.foo,用于返回调用ServletContext.getAttribute("foo")的返回值。
5,attr对象,如果可以访问到,则访问PageContext,否则将依次搜索如下对象:HttpServletRequest, HttpSession , ServletContext中的属性。
OGNL表达式还可以直接生成一个集合,如:
{e1,e2,e3}可以生成一个List;多个元素之间以英文逗号分隔。
#{key1:value1,key2:value2}可以生成一个Map;key-value之间以英文冒号分隔,多个元素之间以英文逗号分隔。
OGNL还提供了两个元素符:in和not in,in判断某个元素是否在指定的集合中,not in判断某个元素是否不在指定集合中。如下例:
<s:if test="'foo'" in {'foo','fooo'} >包含</s>
<s:if test="'foo'" not in {'foo','fooo'} >不包含</s>
除此之后,OGNL还允许通过某个规则取得集合的子集。取得子集时有如下3个操作符:
1,? 取出所有符合选择逻辑的元素
2,^ 取出符合选择逻辑的第一个元素
3,$ 取出符合选择逻辑的最后一个元素
如以下代码:person.relatives.{? #this.gender == 'male'}
直接在集合后紧跟.{}运算符表明用于取出该集合的子集,在{}内使用?表明取出所有符合选择逻辑的元素,而#this代表集合里元素。因此,上面代码的含义是:取出person里所有的gender等于male的relatives的属性的集合。
OGNL支持基本的Lambda(λ)表达式语法。通过这种Lambda表达式语法,可以让我们在OGNL表达式中使用一些简单的函数。如下面的斐波那契数列:
if n==0 return 0;
elseif n==1 return 1;
else return fib(n-2)+fib(n-1);
fib(0)=0
fib(1)=1
fib(11)=89
我们可以使用OGNL表达式来求该数列中第11个元素的值:
<s:property value="#fib =:[#this==0 ? 0 : #this==1 ? 1 : #fib(#this-2) + #fib(#this-1)], #fib(11)" />
用OGNL表达式取出valueStack中的值的方式为${requtestScope.username};
分享到:
相关推荐
struts2的ognl
Struts2 OGNL---标签详解析 都有实例 适合初学者
关于struts2 OGNL 详细教程,对初学者有帮助
struts2 ognl2.6.11源代码,官网上下要很麻烦,麻烦的事就我帮各位做了
对 Struts2 OGNL 的分析与简介
本资源适合刚接触Struts和Ognl的小伙伴交流学习,欢迎吐槽。
struts2 ognl源文件 在ECLIPSE导入后可方面的利于开发
NULL 博文链接:https://chaoyi.iteye.com/blog/2161928
从官网checkout下来的源码,如果大家觉的区官网麻烦可以直接下载这个
struts2 ognl 取list ,set map ,方法,静态变量的值,
struts2OGNL表达式ActionContext及valuesStack.pdf
Struts2学习计划5---Struts2_OGNL(对象图导航语言)的学习
主要是ognl的用法,很适合新手上路的,源代码很清晰可见,一看就懂
struts2中ognl表达式的用法,详细介绍了ognl表达式与struts2基本标签的结合。
struts2 OGNL之标签访问值栈(value stack)用法,希望能对大家有帮助
Struts2中ognl-2的源代码,从官网下载的
Struts2的OGNL示例,使用Maven构建,导入请前先安装maven。
在struts2编程中,ognl帮助文档,你可导入到工程里,就可以查看相关文档。
本人在学习struts2框架时的学习笔记,主要是ognl表达式语言的运用。希望对大家有所帮助!