[Struts2] Struts中OGNL
2017-09-07 20:29
405 查看
Struts中OGNL
一、OGNL概念
OGNL(Object Graph Navigation Language),即对象图导航语言,是一种功能强大的表达式语言,可以任意存取对象的属性或者调用对象的方法。OGNL表达式的计算是围绕OGNL上下文进行的,OGNL上下文实际上是一个Map对象,由ognl.Context类来表示,它里面可以存放很多个JavaBean对象,它有一个上下文根对象,上下文中的根对象可以直接使用名来访问或直接使用它的属性名来访问它的属性值,否则要加前缀”#key”。
Struts的标签库都是使用OGNL表达式来访问ActionContext中的对象数据的。
Struts将ActionContext设置为OGNL上下文,并将值栈作为OGNL的根对象放置到ActionContext中。
二、值栈
访问值栈中的对象不用“#”,Struts总是将当前Action实例放置在栈顶,所以在OGNL中引用Action中的属性也不需要“#”。三、OGNL中三个重要的符号:#、%、$
3.1 #符号
#相当于ActionContext.getContext(),用于访问OGNL上下文和action上下文。
访问非根对象属性,例如#session.msg表达式,由于Struts中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀,实际上#相当于ActionContext.getContext(),#session.msg 表达式相当于ActionContext.getContext().getSession().getAttribute(“msg”);
用于过滤和投影集合,如persons.{?#this.age>25}, persons.{?#this.name==”pla1”}.{age}[0];
用于构造map,例如#{‘foo1’:’bar1’, ‘foo2’:’bar2’}。
名称 | 作用 | 例子 |
---|---|---|
parameters | 包含当前HTTP请求的Map | #parameters.id[0]=request.getParameter("id") |
request | 包含当前HttpServletRequest属性的Map | #request.username=request.getAttribute("username") |
session | 包含当前HttpSession属性的Map | #session.username=session.getAttribute("username") |
application | 包含当前ServletContext属性的Map | #application.username=application.getAttribute("username") |
attr | 用于按照request>session>application的顺序访问其属性 | #attr.username相当于按照顺序在以上三个范围内读取username的属性,直到找到为止 |
3.2 %符号
%符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值,即在struts字符串中用%{}指出,其内部是一个OGNL表达式,需要解析,例如:<h3>构造Map</h3> <s:set name="foobar" value="#{'foo1':'bar1','foo2':'bar2'}"/> <p>The value of key "fool" is <s:property value="#foobar['foo1']"/></p> <p>不使用%:<s:url value="#foobar['foo1']"/></p> <p>使用%:<s:url value="%{#foobar['foo1']}"/></p>
运行结果如下:
the value of key "fool" is bar1 不使用%:#foobar['foo1'] 使用%:bar1
3.3 $符号
$符号有两个用途:在国际化资源文件中,引用OGNL表达式,例如国际化资源文件中的代码:reg.agerange=国际化资源信息:年龄必须在
${min}同
${max}之间
在Struts 框架的配置文件中引用OGNL表达式。
相关文章推荐
- Struts2学习总结(3)--值栈,Ognl表达式,Struts标签库,国际化,数据校验,拦截器
- Struts2——struts2.3.24-OGNL调用构造器失败的原因及解决方法
- Myeclipse6.5 在配置struts2 时加入了包commons-fileupload-1.2.2,ognl,struts-core,commons-loggin,xwork之后还报错
- Struts2学习总结(七):Struts中的OGNL
- struts_05 各种验证器,ognl表达式,struts2常用标签,防止表单重复提交,jfreeChart插件的运用
- JAVAWEB开发之Struts2详解(四)——ognl与valueStack(重点)、Struts常用标签、防止表单重复提交、Struts2中内置json插件
- day28-struts2( struts架构分析,ognl表达式,ognl表达式)
- Struts2——(4)OGNL与struts标签
- Struts2 - Struts访问ServletAPI和OGNL学习(从零开始学习Strust2_07)
- Struts2——(4)OGNL与struts标签
- Struts2 入门3:Ognl表达式语言与struts标签
- struts.xml com.bjsxt.struts2.ognl
- Struts2学习总结(3)--值栈,Ognl表达式,Struts标签库,国际化,数据校验,拦截器
- Struts2学习——(六)值栈与OGNL表达式[结合struts标签]
- Struts中的OGNL表达式语言1/Struts标签与OGNL表达式语言实例演练2/Struts2常用标签总结3
- Struts2--OGNL
- Struts1 和Struts2的区别及联系
- struts1 ,struts2 是否是单例
- struts2里的ognl实现
- Struts(8)——OGNL与Struts结合的原理