OGNL表达式语言介绍;
OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,
它是一个开源项目。 Struts2框架使用OGNL作为默认的表达式语言。
OGNL相对其它表达式语言具有下面几大优势:
1、支持对象方法调用,如xxx.doSomeSpecial();
2、支持类静态的方法调用和值访问,表达式的格式:
@[类全名(包括包路径)]@[方法名 | 值名],例如:
@java.lang.String@format('foo %s', 'bar')
或@tutorial.MyConstant@APP_NAME;
3、支持赋值操作和表达式串联,如price=100, discount=0.8,
calculatePrice(),这个表达式会返回80;
4、访问OGNL上下文(OGNL context)和ActionContext;
5、操作集合对象。
Ognl 有一个上下文(Context)概念,说白了上下文就是一个MAP结构,它实现了java.utils.Map的接口.
理解Struts2中的 ValueStack:
ValueStack实际是一个接口,在Struts2中利用OGNL时,实际上使用的是实现了该接口的OgnlValueStack类,这个类是Struts2利用OGNL的基础
ValueStack(值栈): 贯穿整个 Action 的生命周期(每个 Action 类的对象实例都拥有一个
ValueStack 对象). 相当于一个数据的中转站. 在其中保存当前
Action 对象和其他相关对象.
Struts 框架把 ValueStack 对象保存在名为 “struts.valueStack” 的请求属性中,request中
在 ValueStack 对象的内部有两个逻辑部分:
ObjectStack: Struts 把动作和相关对象压入 ObjectStack 中--List
ContextMap: Struts 把各种各样的映射关系(一些 Map 类型的对象) 压入 ContextMap 中
Struts 会把下面这些映射压入 ContextMap 中
parameters: 该 Map 中包含当前请求的请求参数
request: 该 Map 中包含当前 request 对象中的所有属性
session: 该 Map 中包含当前 session 对象中的所有属性
application:该 Map 中包含当前 application 对象中的所有属性
attr: 该 Map 按如下顺序来检索某个属性: request, session, application
理解OGNL Context:
OgnlValueStack 类包含两个重要的属性 一个root和一个context。
* 其中root本质上是一个ArrayList.
* 而context 是一个Map(更确切的说是一个OgnlContext对象)
在这个OgnlContext对象(context)中,有一个默认的顶层对象 _root,OGNL访问context中这个默认顶层对象中的元素时,是不需要#号的,直接通过元素的名称来进行访问,
而访问其他对象时,如 request、session、attr等,则需要#号引用。
注:Struts2将OgnlValueStack的root对象赋值给了OgnlContext 中的_root对象,在OgnlValueStack的root对象中,保存着调用Action的实例,因此,在页面上通过Struts2标签访问Action 的属性时,就不需要通过#号来引用
总结:ognl Context包含 ObjectStack属性和ContextMap属性
当Struts2接受一个请求时,会迅速创建ActionContext,ValueStack,action 。然后把action存放进ValueStack,所以action的实例变量可以被OGNL访问。
注意: Struts2中,OGNL表达式需要配合Struts标签才可以使用。如:<s:property value="name"/>
分享到:
相关推荐
struts2 中 OGNL表达式的使用struts2 中 OGNL表达式的使用
struts2-OGNL表达式测试代码
struts2 OGNL,struts2 表达式语言,Struts2 中OGNL表达式的用法,Struts2 #,表达式语言的好处,Struts2 $,struts2 井号,星号,百分号
NULL 博文链接:https://chaoyi.iteye.com/blog/2158731
struts2中ognl表达式的用法,详细介绍了ognl表达式与struts2基本标签的结合。
最近的项目开发中使用了struts2的框架,但是好多人都不清楚struts2的标签的具体的用法,要想完全掌握struts2标签的用法,那么你必须先精通了struts2中OGNL的用法。struts2中很多东西其实理解就行,但是惟独OGNL虽然...
struts2标签和OGNL表达式struts2标签和OGNL表达式
Struts2的标签库及OGNL表达式语言
Struts 2默认的表达式语言是OGNL,原因是它相对其它表达式语言具有下面几大优势: 1、 支持对象方法调用,如xxx.doSomeSpecial(); 2、支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@...
主要介绍了Struts2 OGNL表达式实例详解,相关实例代码,需要的朋友可以参考。
struts2OGNL表达式ActionContext及valuesStack.pdf
struts2标签和OGNL表达式.pdf
NULL 博文链接:https://takeme.iteye.com/blog/1668255
NULL 博文链接:https://laz383310051.iteye.com/blog/754884
本资源适合刚接触Struts和Ognl的小伙伴交流学习,欢迎吐槽。
主要介绍了Struts2 通过ognl表达式实现投影,具有一定参考价值,需要的朋友可以了解下。
OGNL是对象图导航语言(即该表达式访问的是对象及对象的属性)
ognl表达式在struts中的用法解析
NULL 博文链接:https://cdxs2.iteye.com/blog/1926840
Struts2的OGNL表达式语言Object-Graph Navigation Language