概述
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语法获取值栈中的第二个对象的属性:
最后
以上就是友好冰棍为你收集整理的OGNL中$、%、#、{}、^、$ 标签的使用简介的全部内容,希望文章能够帮你解决OGNL中$、%、#、{}、^、$ 标签的使用简介所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复