知识大全 对Struts2 OGNL的分析与简介
Posted 属性
篇首语:成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 对Struts2 OGNL的分析与简介相关的知识,希望对你有一定的参考价值。
对Struts2 OGNL的分析与简介 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Struts OGNL基础上的增强
1 值栈(ValueStack)
Struts OGNL上下文设置为Struts 中的ActionContext(内部使用的仍然是OgnlContext) 并将值栈设为Struts OGNL的根对象
我们知道 Struts OGNL上下文中的根对象可以直接访问 不需要使用任何特殊的 标记 而引用上下文中的其他对象则需要使用 # 来标记 由于值栈是上下文中的根对象 因此可以直接访问 那么对于值栈中的对象该如何访问呢?Struts 提供了一个特殊的OGNLPropertyAccessor 它可以自动查找栈内的所有对象(从栈顶到栈底) 直接找到一个具有你所查找的属性的对象 也就是说 对于值栈中的任何对象都可以直接访问 而不需要使用 #
假设值栈中有两个对象 student和employee 两个对象都有name属性 student有学号属性number 而employee有薪水属性salary employee先入栈 student后入栈 位于栈顶 那么对于表达式name 访问的就是student的name属性 因为student对象位于栈顶 表达式salary 访问的就是employee的salary属性 正如你所见 访问值栈中的对象属性或方法 无须指明对象 也不用 # 就好像值栈中的对象都是OGNL上下文中的根对象一样 这就是Struts 在OGNL基础上做出的改进
[N]语法
如上所述 如果想要访问employee的name属性 应该如何写表达式呢?我们可以使用[N] xxx(N是从 开始的整数)这样的语法来指定从哪一个位置开始向下查找对象的属性 表达式[ ] name访问的就是employee对象的name属性
在使用[N] xxx语法时 要注意位置序号的含义 它并不是表示 获取栈中索引为N的对象 而是截取从位置N开始的部分栈
top关键字
top用于获取栈顶的对象 结合[N] xxx语法 我们就可以获取栈中任意位置的对象
如 [ ] top [ ] top等
访问静态成员
除了使用标准的OGNL表达式访问静态字段和静态方法外 Struts 还允许你不指定完整的类名 而是通过 vs 前缀来调用保存在栈中的静态字段和静态方法
@vs@FOO_PROPERTY@vs@someMethod()@vs @someMethod()
vs表示ValueStack 如果只有vs 那么将使用栈顶对象的类 如果在vs后面跟上一个数字 那么将使用栈中指定位置处的对象类
标准方法:@类全限定名@静态属性或方法名
< ?xml:namespace prefix = s />< s:property value= @action SystemInfo@WEB_CONTEXT >< /s:property>
值栈中的Action实例
Struts 框架总是把Action实例放在栈顶 因为Action在值栈中 而值栈又是OGNL中的根 所以引用Action的属性可以省略 # 标记 这也是为什么我们在结果页面中可以直接访问Action的属性的原因
Struts 中的命名对象
Struts 还提供了一些命名对象 这些对象没有保存在值栈中 而是保存在ActionContext中 因此访问这些对象需要使用 # 标记 这些命名对象都是Map类型
parameters
用于访问请求参数 如 #parameters[ id ]或#parameters id 相当于调用了HttpServletRequest对象的getParameter()方法
注意 parameters本质上是一个使用HttpServletRequest对象中的请求参数构造的Map对象 一量对象被创建(在调用Action实例之前就已经创建好了) 它和HttpServletRequest对象就没有了任何关系
request
用于访问请求属性 如 #request[ user ]或#request user 相当于调用了HttpServletRequest对象的getAttribute()方法
session
用于访问session属性 如 #session[ user ]或#session user 相当于调用了HttpSession对象的getAttribute()方法
application
用于访问application属性 如 #application[ user ]或#application user 相当于调用了ServletContext的getAttribute()方法
attr
如果PageContext可用 则访问PageContext 否则依次搜索request session和application对象
cha138/Article/program/Java/ky/201311/28342相关参考
Struts2简介 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一什么是Struts? 虽然
Struts2框架使用实例分析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 下面我们通过实例来
Struts2请求处理流程及源码分析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Struts
Struts2与Struts1的对比 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Action
浅析Struts2与Webwork2的区别 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 
浅谈Struts2分页的实现与代码实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 关于Str
小解一下Struts2与Webwork2的区别 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb
1.概要如有很多原因会造成反渗透设备不能正常运行。如同医生诊病一样,在你对问题作进一步分析之前,你必须可能地收集各种征状。2.简介本篇的主题是如何排除RO设备的故障,我们假定设备设计有相应的仪表和取样
1.概要如有很多原因会造成反渗透设备不能正常运行。如同医生诊病一样,在你对问题作进一步分析之前,你必须可能地收集各种征状。2.简介本篇的主题是如何排除RO设备的故障,我们假定设备设计有相应的仪表和取样
1.概要如有很多原因会造成反渗透设备不能正常运行。如同医生诊病一样,在你对问题作进一步分析之前,你必须可能地收集各种征状。2.简介本篇的主题是如何排除RO设备的故障,我们假定设备设计有相应的仪表和取样