您的位置:首页 > 编程语言 > Java开发

OGNL中$、%、#、{}、^、$ 标签的使用简介

2016-05-20 14:35 302 查看
1. Struts2中将ActionContext作为OGNL的上下文环境(ActionContext内部含有一个Map对象)

2. Struts2中的OGNL表达式语言的根对象是一个ValueStack,ValueStack中的每一个对象都被视为根对象。

Struts2框架将实例化的Action对象放入ValueStack中,如果是Action链,则多个Action都存在于ValueStack中。而ValueStack中除了Action外,Struts2框架还将parameters,request,response,session,application,attr等对象放到ActionContext中,访问这些对象需要加前缀#。



OGNL中 $ 号的使用

1..在国际化资源文件中,引用OGNL表达式
2..在struts.xml文件中,引用OGNL表达式


OGNL中%号的使用

“%”符号的用途是在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是OGNL表达式。

这个类似js中的eval,很暴力。

1..使用%{}可以取出保存在值堆栈中的Action对象,直接调用它的方法

2..如果Action继承了ActionSupport,那么在页面标签中可以使用%{getText(‘key’)}获取国际化信息

OGNL中#号的使用

OGNL中的#号可以取出堆栈上下文中存放的对象



“#”符号的用途一般有三种:

— 、访问非根对象属性,例如#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。实际上,#相当于ActionContext. getContext();#session.msg表达式相当于ActionContext.getContext().getSession(). getAttribute(“msg”) 。

二、用于过滤和投影(projecting)集合,如persons.{?#this.age>25},persons.{?#this.name==’pla1’}.{age}[0]。

三、用来构造Map,例如示例中的#{‘foo1’:’bar1’, ‘foo2’:’bar2’}。

利用投影获取属性

利用投影获取List中对象的username属性时,其中{}表示的是一个集合

stus.{username}就表示将suts中所有的username属性取出组成一个新的列表

利用选择获取属性

OGNL表达式是很灵活的,可以同时使用选择技术与投影技术获取属性

使用选择技术时,#this代表当前元素,问号?是把所有满足条件的元素都取出来。

上箭头^是开始的意思,即取符合条件的数据索引中第一条数据,所以stus.{^#this.grade>=60}.{username}输出的是[张三]

注意,此时输出文本中包含中括号,这表示它是一个列表。

而stus.{?#this.grade>=60}.{username}[0]输出的是张三,是字符串,二者是不同的。

美元符号是结束的意思,即取符合条件的数据索引中最后一条数据,所以stus.{#this.grade>=60}.{username}输出的是[王五]

这三个符号:问号、上箭头、美元符所返回的都是List

另符两语法:

使用Top语法获取值栈中的第二个对象的属性:

使用N语法获取值栈中的第二个对象的属性:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts2.0