Struts2标签库(1):OGNL表达式语言
来源:互联网 发布:sql点击安装没反应 编辑:程序博客网 时间:2024/06/06 02:50
Struts2利用内建的OGNL(Obejct Graph Navigation Language)表达式语言的支持,大大加强了Struts2的数据访问功能,XWork在原有的OGNL基础上,增加了对ValueStack的支持。
在传统的OGNL表达式求值中,系统会假设只有一个“根”对象。下面是标准OGNL表达式求值,如果系统的Stack Context中包含两个对象:foo对象,它在Context中的名字为foo;bar对象,它在Context中的名字为bar,并将foo对象设置成Context的根对象。
#foo.blah //返回foo.getBlah( )的返回值#bar.blah //返回bar.getBlah( )的返回值blah //因为foo是根对象,所以默认返回foo.getBalh( )的返回值通过上面的代码可以看出,OGNL表达式的语法非常简洁,如果有以下代码:
#bar.foo.blah意味着返回bar.getFoo( ).getBlah( )的返回值。如果需要访问的属性属于根对象,则可以直接访问该属性,如blah;否则必须使用一个对象名作为前缀修饰该属性,如#bar.blah。
Struts2可以直接从对象中获取属性。Struts2提供了一个特殊的OGNL 属性访问器,它可以自动搜寻Stack Context的所有实体(从上到下),直到找到与求值表达式匹配的属性。
例如Stack Context中包含两个根实例:animal和person,这两个实例中包含“name”属性,而且animal还有一个“species”属性,而person有一个“salary”属性,其中animal是栈顶元素,而person实例在其后面。看下面的求值表达式:
species //返回animal.getSpecies()salary //返回person.getSalary()name //因为Struts2先找到animal实例,所以返回animal.getName()如果实在需要取得person实例的name属性,必须通过如下代码:
#person.nameStruts2使用标准的Context来进行OGNL表达式语言求值,OGNL的顶级对象是一个Context,这个Context对象就是一个Map类型实例,其根对象就是ValueStack,如果需要访问ValueStack里的属性,直接通过${bar}即可。除此之外,Struts2还提供了一些命名对象,它们存在于Stack Context中,所以访问这些对象时需要使用#前缀来指明。
用于返回调用HttpServletRequest的getParameter("foo")的返回值。request对象用于访问HttpServletRequest的属性。例如#request['foo']或#request.foo,
用于返回调用HttpServletRequest的getAttribute("foo")的返回值。session对象用于访问HttpSession的属性。例如#session['foo']或#session.foo,
用于返回调用HttpSession的getAttribute("foo")的返回值。application对象用于访问ServletContext的属性。例如#application['foo']或#application.foo,
用于返回调用ServletContext的getAttribute("foo")的返回值。attr对象该对象将依次搜索如下对象:PageContext、HttpServletRequest、
HttpSession、ServletContext中的属性当系统创建了Action实例后,该Action实例已经被保存到ValueStack中,故无须书写#即可访问Action属性。
Stack Context 和 ValueStack :
Stack Context是整个OGNL计算、求值的Context。
ValueStack只是Stack Context内的“根”对象而已。OGNL的Stack Context里除了包括ValueStack这个根之外,还包括parameters、request、session、application、attr等对象,但这些命名对象都不是根。
Stack Context里的“根”对象和普通命名对象的区别在于:
① 访问Stack Context里的命名对象需要在对象名之前添加#前缀
② 当访问OGNL的Stack Context里的“根”对象的属性时,可以省略对象名。
- Struts2标签库(1):OGNL表达式语言
- Struts2标签库汇总和OGNL表达式语言
- Struts2 - OGNL表达式和Struts2标签库
- Struts中的OGNL表达式语言1/Struts标签与OGNL表达式语言实例演练2/Struts2常用标签总结3
- OGNL表达式struts2标签“%,#,$”
- OGNL表达式struts2标签“%,#,$”
- OGNL表达式struts2标签“%,#,$”
- OGNL表达式struts2标签“%,#,$”
- OGNL表达式struts2标签“%,#,$”
- OGNL表达式struts2标签“%,#,$”
- OGNL表达式struts2标签“%,#,$”
- OGNL表达式struts2标签“%,#,$”
- OGNL表达式struts2标签“%,#,$”
- OGNL表达式struts2标签“%,#,$”
- OGNL表达式struts2标签“%,#,$”
- OGNL表达式struts2标签“%,#,$”
- OGNL表达式struts2标签“%,#,$”
- OGNL表达式struts2标签“%,#,$”
- 绝妙的取样
- 系统性能调优6篇
- Winform应用程序强制退出
- 启动Activity时,不让EditText弹出输入法-解决办法
- 反射机制
- Struts2标签库(1):OGNL表达式语言
- 软工课题——实验报告二
- 多线程中对全局变量(整型类型)是否需要同步操作
- Lucene教程详解
- ios调用闪光灯
- protobuf是啥玩意儿
- 正则表达式
- Linux中如何让进程在后台运行
- 总结MySQL建表、查询优化实用小技巧