读书人

《研磨struts2》第七章 值栈跟OGNL 之

发布时间: 2012-06-30 17:20:12 作者: rapoo

《研磨struts2》第七章 值栈和OGNL 之 7.2 OGNL

7.2? OGNL

7.2.1? OGNL概述

OGNL是对象图导航语言Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。

在前面的例子中,登录页面输入框的name用到的名字就是OGNL的表达式,比如:“账号:<input type="text" name="account">”,在欢迎页面使用“<s:property value="account"/>”。两个"account"表达式都是相同的,但前一个保存对象属性的值,后一个是取得对象属性的值。

表达式语言简单、易懂却又功能强大,关于OGNL更多的介绍可以去http://www.ognl.org看看,那里有很详细的文档。

7.2.2? OGNL的基本使用

1:常量与操作符

在OGNL中,可以使用Java的常量操作和数学运算。需要注意的是,String常量可以使用单引号或者双引号括起来,但是单个字符也是使用单引号,所以只有在超过一个字符的时候,使用单引号界定的常量才是String类型的。如果需要只定义一个包含单个字符的String常量,就需要使用转义。

?????? 比如:<s:property value="'account'"/>这句话里面的account就是个字符串,因为它是用单引号括起来的。或者<s:property value="7+8"/>这句话,输出就是15,也就是数学运算后的值。

2:方法调用

OGNL支持方法的调用,这个在后面有演示,比如访问静态方法,比如访问集合对象的方法等,这里就不去赘述了。

3:设置数值及表达式列表

OGNL让你可以在单条语句中执行逗号分隔的多个表达式,最后一个表达式的返回值作为整条语句的输出。

4:使用OGNL访问ValueStack

在OGNL中,没有前缀代表了访问当前值栈。

?????? 比如前面的示例中,在欢迎页面中使用的“<s:property value="account"/>”,这句话中<s:property>标签的value属性的值就是使用的ognl,它没有任何前缀,就表示直接访问值栈。

访问到值栈过后,会按照从栈顶到栈底的顺序,寻找第一个匹配的对象,那就会找到Action中的account属性,然后就取到值了。

5:使用OGNL访问ActionContext

在ognl中,可以通过符号“#”来访问ActionContext中除了值栈之外的各种值,典型如:

读书人网 >软件架构设计

热点推荐