XWork专署语言功能
XWork在OGNL之上提供的最大改进就是支持ValueStack. OGNL操作假设这里只有一个 "根", XWork的ValueStack概念需要这里有很多 "根".
例如, 假设我们使用标准OGNL (不使用XWork), 这时如果有两个对象在 OgnlContext map 中: "foo" -> foo 而 "bar" -> bar, foo对象被配置为唯一的 根(root) 对象. 下面的代码演示了OGNL如何处理这三种情况:
着意味着OGNL允许上下文中保存多个对象, 但是除非你正在试图访问的这个对象是根对象, 否则必须预先跟上一个命名空间如 @bar. 现在让我们看看XWork, 它有一些不同之处...
|
有用的信息
在 XWork 中, 整个 ValueStack 是上下文的根对象. 不只根据你的表达式从栈 (stack) 中获取对象, 还从对象中获取属性 (例如: peek().blah), XWork有一个特殊的OGNL PropertyAccessor (属性访问器), 它可以自动搜寻栈内的所有实体 (从上到下), 直到找到一个具有与你所寻找的对象和属性匹配的.
|
例如, 假设栈中包括两个对象: Animal(动物)和Person(人). 两个多项都有 "name" 属性, Animal具有一个 "species" 属性, 而Person有一个 "salary" 属性. Animal是栈顶元素, Person在它后面. 下面的代码片断帮助你理解这个过程:
最后一个例子, 这种关系让 animal 的 name 被返回. 一般这就是希望的效果, 但是有时你希望访问的是顺序靠后的对象的属性. 如果这样的话, XWork 还提供了按照索引 (index) 访问VlueStack的方法. 你只需这样做:
通过表达式如 [0] ... [3] 等, WebWork将会截取栈的部分且返回一个 CompoundRoot(复合根) 对象. 获取那个特殊的部分栈 (stack cut), 使用[0].top
ognl 表达式描述
[0].top |
将会返回这个部分栈 (stack cut)的栈顶元素, 也就是从整个栈的第0个开始 (这里与top相似) |
[1].top |
将会返回这个部分栈 (stack cut)的栈顶元素, 也就是从整个栈的第1个开始 |
访问静态属性
OGNL支持访问静态属性和静态方法. 如OGNL文档指出的, 你可以精确的调用静态内容, 通过如下方法:
@some.package.ClassName@FOO_PROPERTY
@some.package.ClassName@someMethod()
而且, XWork允许你不指定详细的类路径, 通过 "vs" 前缀调用你的action类中的静态属性或方法:
@vs@FOO_PROPERTY
@vs@someMethod()
@vs1@FOO_PROPERTY
@vs1@someMethod()
@vs2@BAR_PROPERTY
@vs2@someOtherMethod()
"vs" 代表 "value stack". 重要的是要注意如果你指定的类名仅仅是 "vs", 将使用栈顶对象的类. 如果你在 "vs" string后面指定了一个数字, 那么取而代之, 将使用栈中靠下面的对象的类.
与WebWork 1.x EL的区别
除了前面的例子和描述, 相对于WebWork 1.x 这里有一些主要的改变. 最大的改变是属性不再通过一个正斜杠 (/) , 而是使用 (.). 还有, 代替使用 ".." 来向上引用栈, 我们现在使用 "[n]" , 这里n是一个正数. 最后, 在WebWork 1.x 你可以通过 "@foo" 访问特别的命名对象 (准确的说是request scope的属性), 但是现在特殊的变量使用 "#foo"访问. 然而, 一定要注意 "#foo" 不再 访问request属性. 因为 XWork 不只是为Web而设计的, 这里没有 "request属性" 这样的概念, 这样 "#foo" 仅仅是OgnlContext中除了根以外的另外一个对象.
老的表达式 新的表达式
foo/blah |
foo.blah |
foo/someMethod() |
foo.someMethod() |
../bar/blah |
[1].bar.blah |
@baz |
不直接支持, 但是#baz是类似的 |
. |
top 或 [0] |
WebWork专署的命名对象
名称值
#parameters['foo'] 或 #parameters.foo |
request parameter ['foo'] (相当于request.getParameter()) |
#request['foo'] 或 #request.foo |
request attribute ['foo'] (相当于request.getAttribute()) |
#session['foo'] 或 #session.foo |
session attribute 'foo' |
#application['foo'] 或 #application.foo |
ServletContext attributes 'foo' |
#attr['foo'] 或 #attr.foo |
如果可以访问到则访问PageContext, 否则将分别访问 request/session/application 上下文! |
分享到:
相关推荐
开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12...
赠送jar包:ognl-3.1.12.jar; 赠送原API文档:ognl-3.1.12-javadoc.jar; 赠送源代码:ognl-3.1.12-sources.jar; 赠送Maven依赖信息文件:ognl-3.1.12.pom; 包含翻译后的API文档:ognl-3.1.12-javadoc-API文档-...
ognl-3.0.5源码 本人最近在研究s2sh源码,如有需要请留言。 在使用过程中如果有问题可联系,让我们开始学习s2sh源码总动员吧!
**ognl-2.6.11.jar 官方源码详解** OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。它被广泛应用于许多Java框架,如Struts2,因为它允许动态地访问和操作对象的...
**标题:“ognl-2.6.11.jar”** **描述:“struts2中ognl-2.6.11.jar源码文件”** **标签:“ognl”,“ognl-2.6.11”** 在Java Web开发领域,`ognl-2.6.11.jar`是一个关键的组件,它属于OGNL(Object-Graph ...
mina-integration-ognl-2.0.0-M4.jar mina-integration-ognl-2.0.0-M4.jar
这个压缩包包含两个JAR文件,分别是源码版本(ognl-3.0-sources.jar)和编译后的二进制版本(ognl-3.0.jar)。 **Java JAR文件** Java Archive (JAR) 文件是Java平台上的一个标准打包格式,它将多个类文件、资源...
ognl-3.0.jar ognl-3.0.jar
赠送jar包:ognl-3.2.21.jar; 赠送原API文档:ognl-3.2.21-javadoc.jar; 赠送源代码:ognl-3.2.21-sources.jar; 赠送Maven依赖信息文件:ognl-3.2.21.pom; 包含翻译后的API文档:ognl-3.2.21-javadoc-API文档-...
OGNL-2.7源码和jar包的提供,意味着我们可以深入理解其内部工作机制,并在需要时进行自定义或调试。 **1. OGNL的基本概念** OGNL的主要功能是提供一种简洁的语法来访问和操作Java对象的属性。例如,`user.name`表示...
ognl-3.0.4.jar ognl-3.0.4.jar
ognl-3.0.14.jar
ognl-3.1.15.jar
赠送jar包:ognl-3.2.21.jar; 赠送原API文档:ognl-3.2.21-javadoc.jar; 赠送源代码:ognl-3.2.21-sources.jar; 赠送Maven依赖信息文件:ognl-3.2.21.pom; 包含翻译后的API文档:ognl-3.2.21-javadoc-API文档-...
camel-ognl-1.6.4.jar, camel-ognl-2.8.1.jar, com.springsource.org.ognl-2.6.9.jar, com.springsource.org.ognl-sources-2.6.9.jar, ognl-2.5.1.jar, ognl-2.6.11.jar, ognl-2.6.3.jar, ognl-2.6.5.jar, ognl-...
ognl-3.0.5.jar 日志开源组件 OGNL表达式 ognl-3.0.5.jar 日志开源组件 OGNL表达式
JavaEE源代码 ognl-2.6.11JavaEE源代码 ognl-2.6.11JavaEE源代码 ognl-2.6.11JavaEE源代码 ognl-2.6.11JavaEE源代码 ognl-2.6.11JavaEE源代码 ognl-2.6.11JavaEE源代码 ognl-2.6.11JavaEE源代码 ognl-2.6.11JavaEE源...
ognl-3.1.12.pom
赠送jar包:ognl-3.1.12.jar; 赠送原API文档:ognl-3.1.12-javadoc.jar; 赠送源代码:ognl-3.1.12-sources.jar; 赠送Maven依赖信息文件:ognl-3.1.12.pom; 包含翻译后的API文档:ognl-3.1.12-javadoc-API文档-...
标题中的“ognl-3.0.21.jar”和“ognl.jar”是指OGNL(Object-Graph Navigation Language)的特定版本库文件。OGNL是一种强大的表达式语言,广泛用于Java应用程序,尤其是Web开发框架如Struts 2中,用于在模型、视图...