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中 $ 号的使用
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语法获取值栈中的第二个对象的属性:
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语法获取值栈中的第二个对象的属性:
相关文章推荐
- Struts - 标签库
- struts1.0于struts2.0的比较
- Struts2中关于namespace的学习心得
- Struts2----自定义action的学习心得
- HTTP Status 404 - There is no Action mapped for namespace [/] and action name [login!welcome] associ
- struts2
- SSH学习笔记---struts2 spring集成时action的class的值
- ssh--问题记录
- 文章标题 使用ajaxFileupload+struts2完成文件的上传以及回显到jsp的链接地址
- struts 学习笔记
- Struts2 的基本配置
- struts2框架架构流程
- struts2.0拦截器(实现未登录的用户不能访问系统的页面)(转)
- Struts2 面试题分析
- Struts2+jQuery+JSON实现异步交互
- 软件开发疑惑解答
- ajax ssh 整合
- 关于struts2框架学习
- struts2 @Action给方法注解
- struts2学习笔记