Struts2的标签库(二)——OGNL表达式
Struts2的标签库(二)
——OGNL表达式
1.Struts2中的OGNL表达式增加了ValueStack的支持。
注:ValueStack——实际上是一个容器对象,该对象在启动Struts2框架时被创建,当前端的JSP页面向Action发送请求时,Struts2框架会将请求的数据封装并存放在栈顶,当请求结束后,此栈顶的数据被清除。Struts2的标签访问数据就是通过访问ValueStack来实现的。
2.Struts2可以直接从对象中获取属性,可以自动搜索Stack Context的所有实例(从上到下),直到找到与求值表达式匹配的属性。
注:Stack Context——一个Map类型的容器,ValueStack是它的根对象。
例如Stack Context中有两个根实例:teacher和student,两个实例都有name属性和say属性,teacher实例中有teach属性,而student中有study属性。teacher实例在栈顶而student在其之后,获取其属性的示例如下:
//这两个属性都是teacher实例和student实例各自特有的属性
//返回teacher的teach属性值(即teacher.getTeach()方法的返回值)
teach
//返回student的study属性值(即student.getStudy()方法的返回值)
study
//当要获取两个实例都有的属性如name或say时
//因为teacher实例位于栈顶所以可以直接获取其属性
//获取teacher实例的name属性(即teacher.getName()方法的返回值)
name
//获取teacher实例的say属性(即teacher.getSay()方法的返回值)
say
//但如果要获取student的name和say属性时,必须要用如下方式
//获取student的name属性(即student.getName()方法的返回值)
#student.name
//获取student的say属性(即student.getSay()方法的返回值)
#student.say
除此之外,也可以通过索引访问Stack Context中的对象:
//访问teacher的name属性
[0].name
//访问teacher的say属性
[0].say
//访问student的name属性
[1].name
//访问student的say属性
[1].say
值得注意的是,使用索引获取元素时并不是从指定索引处直接获取,而是从指定索引处开始向下搜索。
3.Stack Context和ValueStack
Stack Context中包含ValueStack,ValueStack是Stack Context的根对象;在Stack Context中出了有ValueStack这个根对象以外,还有一些命名对象如parameters、request、session、application、attr对象等。
访问命名对象时,需要使用"#",访问根对象时可以省略"#"和对象名。
注:在系统创建了Action实例之后,该Action被存放到了ValueStack中,ValueStack是Stack Context的根对象所以不需要用#来访问。
4.几个常用的命名对象
| 对象 | 作用 | 获取方式一 | 获取方式二 |
| parameters对象 | 访问HTTP请求参数,返回调用HttpServletRequest实例的getParameter("xxx")方法的返回值。 | #parameters['xxx'] | #parameters.xxx |
| request对象 | 访问HttpServletRequest的属性,返回调用HttpServletRequest实例的getAttribute("xxx")方法的返回值 | #request['xxx'] | #request.xxx |
| session对象 | 访问HttpSession的属性,返回调用HttpSession实例的getAttribute("xxx")方法的返回值 | #session['xxx'] | #session.xxx |
| application对象 | 访问ServletContext的属性,返回ServletContext实例的getAttribute("xxx")方法的返回值 | #application['xxx'] | #application.xxx |
5.操作集合
(1)创建集合
//使用OGNL表达式创建一个List类型的集合
{value1,value2,value3,...}
//使用OGNL表达式创建一个Map类型的集合
{key1:value1,key2:value2,key3:value3,...}
(2)有关集合的运算
in:判断某个元素是否在指定集合中。
not in:判断某个元素是否不在指定集合中。
取得子集的运算:
?——取出所有符合选择逻辑的元素。
^——取出符合逻辑的第一个元素。
$——取出符合逻辑的最后一个元素。
6.访问静态成员(静态方法和静态成员变量)
(1)Struts2默认关闭访问静态方法的功能,只提供访问静态变量的功能,如果要访问静态方法需要在struts.xml中作如下修改:
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<!-- 设置OGNL表达式可以访问静态方法 -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
</struts>
(2)访问静态成员的格式:
访问静态成员变量:@类名@静态变量名
访问静态方法:@类名@静态方法名(参数)
Struts2的标签库(二)——OGNL表达式的更多相关文章
- (十六)Struts2的标签库
一.简介 Struts2的标签库使用OGNL为基础,大大简化了数据的输出,也提供了大量标签来生成页面效果,功能非常强大. 在早期的web应用开发中,jsp页面主要使用jsp脚本来控制输出.jsp页面嵌 ...
- Struts2的标签库(四)——数据标签
Struts2的标签库(四) --数据标签 1.action标签 该标签用于在jsp页面直接调用一个Action,通过指定executeResult参数,还可以将Action的处理结果包含到此页面中来 ...
- Struts2之Struts2的标签库
前言: Struts2提供了大量的标签 ,用来帮助开发表现层页面,这些表现一方面解决了美观性的需求,因为它们具有html标签一样的外观,另一方面它们解决了功能性的需求, 因为它们具有jsp脚本一样的逻 ...
- Struts2学习(四)———— ognl表达式、值栈、actionContext之间的关系
一.什么是Ognl? 通过百度百科查询到的解释,其中详细的说明了OGNL的作用. 下面我们就对OGNL这5个作用进行讲解 1.存取对象的任意属性,简单说就是对javabean进行操作(重要) 2.调用 ...
- Struts2的标签库(三)——控制标签
Struts2的标签库(三) --控制标签 1.if/elseif/else标签 用于分支控制,取代JSP中的if语句,根据一个boolean(test属性的值)值判断是否进行下一步运算或者输出等. ...
- JSTL标签库的基本教程之核心标签库(二)
JSTL标签库的基本教程之核心标签库(二) 核心标签库 标签 描述 <c:out> 用于在JSP中显示数据,就像<%= ... > <c:set> 用于保存数据 & ...
- (转)Struts2的标签库
http://blog.csdn.net/yerenyuan_pku/article/details/68638679 Struts2的标签库 对于一个MVC框架而言,重点是实现两部分:业务逻辑控制器 ...
- Struts2的标签库(五)——表单标签
Struts2的标签库(五) --表单标签 几个特殊的表单标签的使用: 1.checkboxlist标签 该标签用于创建多个复选框,用于同时生成多个<input type="check ...
- Struts2的标签库(一)——使用Struts2的标签库
Struts2的标签库(一) --使用Struts2的标签库 1.Struts2的标签库其实就是一个自定义的标签库,所以它也有它的标签处理类和标签库定义文件: 2.和所有自定义标签一样,我们可以找到S ...
随机推荐
- mac ruby rails安装(使用rvm)
mac的场合: which ruby -> /usr/bin/ruby -> 这是mac自带的ruby,我们希望能用管理ruby的版本. 安装rvm curl -L https://get ...
- PAT乙级 1008. 数组元素循环右移问题 (20)
1008. 数组元素循环右移问题 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 一个数组A中存有N(N>0)个整数,在不允 ...
- RobotFramework 安装配置(一)
服务器接口的测试框架的选择,最后选中了 RobotFramework ,原因一:能有效的管理测试用例,,支持批量执行,能实现关键字驱动或者数据驱动.原因二:支持测试人员可以使用Python和java创 ...
- 【RoR win32】新rails运行后0.0.0.0:3000不能访问
在浏览器中使用127.0.0.1:3000来访问
- Openstack的vnc界面定制
先来看一下青云的vnc界面: 在来看一下openstack的自带的vnc界面: 区别于感受 本身原理是一样的,但是vnc上面的html布局不一样而已,但是青云的vnc界面给人的感受是:清晰提示,信息给 ...
- JSON转换类
MXS&Vincene ─╄OvЁ &0000010 ─╄OvЁ MXS&Vincene MXS&Vincene ─╄OvЁ:今天很残酷,明天更残酷,后天很美好 ...
- spring支持的websocket
首发:个人博客 必须说明:这篇博文只用于自己记录,使用spring的websocket支持一定要看官方文档,权威又简明,不推荐看不专业又啰嗦的国产博文. 已尝试了两种方法,当然,不管哪种方法都要先添加 ...
- android 学习随笔二十(多媒体编程 )
1.图片处理 加载大图片 图片大小的计算 图片大小 = 图片的总像素 * 每个像素占用的大小 * 单色图:每个像素占用1/8个字节* 16色图:每个像素占用1/2个字节* 256色图:每个像素占用1个 ...
- 好用的 diskpart 命令,操作磁盘分区,并创建 EFI 引导分区
进入 win8 pe, 或在安装 win8 选择安装磁盘分区时按 shift+F10,都是可能用到 diskpart 去操作的时候. 进入cmd后, diskpart 进入 list disk---- ...
- ubuntu apache开启重写模块
http://www.iblue.cc/2011/09/ubuntu-apache%E5%BC%80%E5%90%AF%E9%87%8D%E5%86%99%E6%A8%A1%E5%9D%97/ Ubu ...