Struts2 OGNL语言、stack、valueStack关系及使用总结
来源:互联网 发布:王牌对王牌网络直播 编辑:程序博客网 时间:2024/04/30 12:01
欢迎转载,转载请注明出处:http://it.zhutibo.com/action/article1237.htm
OGNL是Object-Graph Navigation Language的缩写,我喜欢把它翻译为:文本化对象导航语言(Graph有文本表达的含义,至少这里肯定不是指的是图形了)。
原生OGNL
原生OGNL的数据来源自stack,文章之后把它称为ognl-stack,原生ognl默认仅访问ognl-stack栈顶的对象,访问其它对象需要加上前缀。
Struts对OGNL的扩展
XWork在ognl-stack的基础上加了一个扩展:valueStack。相对于ognl-stack,valueStack仅是ognl-stack里的一个特殊对象。
XWork把ognl对ognl-stack的默认栈顶访问做了一些修改,使ognl默认访问ognl-stack里的valueStack(而valueStack一般不是ognl-stack的栈顶元素)。所以在XWork框架下面(Struts继承自XWork框架),如果要访问valueStack的其它元素的话,需要加上‘#’前缀。
注意struts2标签的一些不明确的api
这一点必须说明,struts2一些标签库的api好多地方写得不明确,经常说的是"push the value to the value stack",其实,这里指的value stack其实一般是ognl-stack:比如
<s:set var="obj" value=""/>这里面key其实是放在ognl-stack里的,所以访问时要加前缀:#obj.something。
<s:push value="obj"/> push标签是真正把obj代表的对象放到valueStack栈顶的。所以,之后可以直接访问obj里的字段,甚至不用任何前缀。如果你要获得sth对象本身,可以用这个表达式:[0].top。整个“[0].top”表达式没有ognl-stack前缀修饰"#",所以像之前所说的,它默认访问valueStack。其中“[0]”表示从valueStack的第0个元素开始截取栈,top表示获得截取后的栈顶元素。
valueStack
valueStack非常值得一说,与一般容器对象不同,valueStack有一个特性:能把元素对象的get方法直接做为valueStack自身的接口暴露出来,并且相同get方法栈顶优先。
最后总结一下:struts里,真正把对象压入到valueStack的情况其它很少,我现在能想起来的有两个地方。一个是s:push标签,一个是实现ModelDriven接口对象里的model;其它一般带var属性的标签其实一般都是把变量放到ognl-stack栈顶,但由于XWork的扩展,所以访问时你仍然需要加上前缀'#'。
一些使用
- 访问ognl-stack里对象
#obj.something - 访问valueStack栈顶对象属性
something - 访问valueStack栈顶对象
[0].top - 访问valueStack栈顶开始第二个对象
[1].something - 访问静态字段
@full.package.name.Obj@SOMETHING - 访问杖举(杖举在Java运行时其实也是普通类,一般访问方式跟静态字段一样)
有关杖举原理可查看我的另一篇文章:Java “枚举类型”详解
struts相关文章:感受一下struts2框架设计及扩展考虑
- Struts2 OGNL语言、stack、valueStack关系及使用总结
- Struts2 ValueStack & ActionContext & OGNL 关系
- Struts2 OGNL valueStack琐碎总结
- struts2之valueStack(OGNL) (总结)
- Struts2 OGNL ValueStack
- Struts2-OGNL-ValueStack
- Struts2 OGNL valueStack
- struts2的ognl与valuestack
- Struts2框架--------OGNL和valueStack
- Struts2-Ognl表达式与ValueStack
- ValueStack、OGNL和Struts2标签
- Struts2小结-ValueStack-OGNL-EL
- Struts-ValueStack和OGNL总结
- Struts2 Value Stack/OGNL
- struts2中OGNL和 ValueStack(一)
- struts2中OGNL和 ValueStack(一)
- struts2中OGNL和 ValueStack(二)
- Struts2中OGNL,valueStack,stackContext的学习
- 多核中percpu
- 她和他的故事(二)
- 学计算机的值得一看的文章
- Make The Change (你必须非常努力,才能看起来毫不费力)
- hdu 1117 免费馅饼
- Struts2 OGNL语言、stack、valueStack关系及使用总结
- Linux使用中的几个小技巧
- hdu1010-dfs回溯
- Python中的包安装工具easy_install
- 暑假ASP.NET学习笔记——7月24号
- 暑假ASP.NET学习笔记——7月25号
- 暑假ASP.NET学习笔记——7月17号
- jsp内置对象及用途
- 范式的一些理解