您的位置:首页 > 编程语言 > Java开发

struts中的OGNL详解

2018-10-13 09:40 148 查看

首先了解下OGNL的概念:
OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整个对象的结构图,实现对象属性类型的转换等功能。

此外,还得先需弄懂OGNL的一些知识:
1.OGNL表达式的计算是围绕OGNL上下文进行的。
OGNL上下文实际上就是一个Map对象,由ognl.OgnlContext类表示。它里面可以存放很多个JavaBean对象。它有一个上下文根对象。
上下文中的根对象可以直接使用名来访问或直接使用它的属性名访问它的属性值。否则要加前缀“#key”。

2.Struts2的标签库都是使用OGNL表达式来访问ActionContext中的对象数据的。如:<s:propertyvalue=“xxx”/>。

3.Struts2将ActionContext设置为OGNL上下文,并将值栈作为OGNL的根对象放置到ActionContext中。

4.值栈(ValueStack) :
可以在值栈中放入、删除、查询对象。访问值栈中的对象不用“#”。
Struts2总是把当前Action实例放置在栈顶。所以在OGNL中引用Action中的属性也可以省略“#”。

5.调用ActionContext的put(key,value)放入的数据,需要使用#访问。

总结OGNL的使用方法:

访问属性

  • 名字属性获取:<s:property value=“user.username”/>
  • 地址属性获取:<s:property value=“user.address.addr”/>

访问方法

  • 调用值栈中对象的普通方法:<s:property value=“user.get()”/>

访问静态属性和方法

  • 调用Action中的静态方法:<s:property value="@struts.action.LoginAction@get()"/>
  • 调用JDK中的类的静态方法:<s:property value="@java.lang.Math@floor(44.56)"/>
  • 调用JDK中的类的静态方法(同上):<s:property value="@@floor(44.56)"/><br
  • 调用JDK中的类的静态方法:<s:property value="@java.util.Calendar@getInstance()"/>
  • 调用普通类中的静态属性:<s:property value="@struts.vo.Address@TIPS"/>

集合的伪属性

OGNL能够引用集合的一些特殊的属性,这些属性并不是JavaBeans模式,例如size(),length()等等. 当表达式引用这些属性时,OGNL会调用相应的方法,这就是伪属性.

OGNL中#的使用

#可以取出堆栈上下文中的存放的对象.

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: