首页 > 其他 > 详细

struts2 OGNL表达式

时间:2015-12-06 22:48:36      阅读:327      评论:0      收藏:0      [点我收藏+]

一、OGNL

OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整个对象的结构图,实现对象属性类型的转换等功能。

1.OGNL表达式的计算是围绕OGNL上下文进行的。
OGNL上下文实际上就是一个Map对象,由ognl.OgnlContext类表示。它里面可以存放很多个JavaBean对象。它有一个上下文根对象。
上下文中的根对象可以直接使用名来访问或直接使用它的属性名访问它的属性值。否则要加前缀“#key”。

2.Struts2的标签库都是使用OGNL表达式来访问ActionContext中的对象数据的。如:<s:propertyvalue="xxx"/>。

3.Struts2将ActionContext设置为OGNL上下文,并将值栈作为OGNL的根对象放置到ActionContext中。

4.值栈(ValueStack) :

可以在值栈中放入、删除、查询对象。访问值栈中的对象不用“#”。
Struts2总是把当前Action实例放置在栈顶。所以在OGNL中引用Action中的属性也可以省略“#”。
 5.调用ActionContext的put(key,value)放入的数据,需要使用#访问。
 
二、OGNL中的#、%和$符号

1、#的三种用途:
(1)访问非根对象属性,例如#session.username,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。实际上,#相当ActionContext. getContext();#session.username表达式相当于ActionContext.getContext().getSession(). getAttribute("username") 。
(2)用于过滤和投影(projecting)集合,例:persons.{?#this.age>20}
(3)用来构造Map,例:#{‘foo1‘:‘bar1‘, ‘foo2‘:‘bar2‘}。
2、%:
%符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。
例:

<h3>构造Map</h3>

    <s:set name="foobar" value="#{‘foo1‘:‘bar1‘, ‘foo2‘:‘bar2‘}" />

    <p>The value of key "foo1" is <s:property value="#foobar[‘foo1‘]" /></p>

    <p>不使用%:<s:url value="#foobar[‘foo1‘]" /></p>

   <p>使用%:<s:url value="%{#foobar[‘foo1‘]}" /></p>

运行界面如下所示。

he value of key "foo1" is bar1

不使用%:#foobar[‘foo1‘]

使用%:bar1

3、$:

(1)在国际化资源文件中,引用OGNL表达式

(2)在Struts 2框架的配置文件中引用OGNL表达式

 

三、示例

 

 

struts2 OGNL表达式

原文:http://www.cnblogs.com/orlion/p/5024564.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!