1.OGNL技术的使用
1).什么是OGNL
源于ognl.jar工具包
Object Graphics Navigation Language(对象图导航语言)
主要用于访问对象的数据和方法。
2).OGNL基本原理
OGNL工具主要由3部分构成,具体如下
a.OGNL引擎
负责解析ONGL表达式,定位数据
b.Root根存储区(Object类型)
负责存储要访问的目标对象。
c.Context变量存储区(Map类型)
负责存放多个要访问的目标对象。
*3).OGNL基本语法
a.访问Root区域对象基本语法
--访问简单数据:"属性"
例如"name"
--访问数组或List集合:"属性[0]"
例如"arr[1]"
--访问Map集合:"属性['key']"或"属性.key"
例如"map.two"或"map['two']"
--访问方法:"属性值.方法()",
例如"list.size()"
--访问构造方法:"new 包名.构造方法"
例如"new java.util.Date()"
--访问静态成员:"@包名.类名@成员"
例如"@java.lang.Math@PI"
--创建List对象:"{元素1,元素2}"
--创建Map对象:
"#{key1:value1,key2:value2}"
b.访问Context区域对象基本语法
采用"#Key"开头.
2.OGNL技术在Struts的使用
在Struts2中有一个ValueStack数据对象,该对象存储了请求相关的所有数据信息。
例如request,session,application,action等.
Struts2采用OGNL工具对ValueStack进行操作。
1)xwork对OGNL进行了部分改造
在xwork中将原来OGNL标准结构中的Root存储区改造成了一个栈结构(CompoundRoot)
当利用"属性"表达式访问时,优先去栈顶对象寻找,没有再去次栈顶寻找。
2)ValueStack结构(OgnlValueStack)
(参考valuestack.jpg)
3)Struts2标签的使用
在JSP中,利用Struts2标签显示数据,需要为标签指定OGNL表达式,
标签利用表达式定位ValueStack中的数据,进行相应操作。
a) debug标签:显示valuestack状态
b) iterator标签:循环集合元素
value属性:指定ognl
var属性:指定循环变量,会被存放到ValueStack的context区域。
status属性:指定循环状态变量,会被存放到ValueStack的context区域.
该变量有count属性表示一共循环了多少个元素。
index属性表示当前循环元素的索引。
c) if...else...标签:判断分支
test属性:指定ognl判断表达式
d) property标签:显示数据
value属性:指定ognl表达式
e) date标签:将date数据格式化输出
name属性:指定ognl表达式
format属性:指定日期模板