OGNL语法
OGNL 表达式中最基本的元素是导航链, 一般简称为"链". 最简单的链包括以下部分:
表 3.1. OGNL 表达式元素
Expression 表达式元素 | 示例 |
---|---|
属性名 | 比如上面的例子中提到的 name 和 headline.text |
方法调用 | hashCode() 返回当前对象的hash code |
数组索引 | listeners[0] 返回当前对象的listeners列表中的第1项 |
所有的OGNL表达式都使用当前对象环境?来进行计算, 而链只需要将前一部分的计算结果当作当前对象, 就可以计算出下一部分的结果. 链的长度完全可以照你的需求来任意扩展. 比如, 下面这个链:
name.toCharArray()[0].numericValue.toString()
表达式按照下面的步骤来进行计算:
-
从初始对象(或者称为根对象)中取得name属性. (初始对象由使用者通过OGNL context提供给OGNL?)
-
在上一步的结果(String对象)上, 调用toCharArray()方法
-
在上一步的结果(字符数组)中, 取得第1个(索引为0)字符
-
取得字符的numericValue属性. (字符被解释为一个Character对象, 而且Character类拥有一个名为getNumericValue()的方法)
-
在上一步的结果(Integer对象)上, 调用toString()方法. 表达式的最终计算结果是一个String, 它由最后那个toString()方法调用返回.
注意, 上面的例子只能用于从对象中取得某个值, 而不是设定某个值. 将上面的表达式传递给 Ognl.setValue() 方法, 将导致一个 InappropriateExpressionException 例外被抛出, 因为链中的最后一个元素, 既不是属性名, 也不是数组索引.
上面这一点点语法已经足够完成你最常见的那些需求了.
孜孜不倦,必能求索;风尘仆仆,终有归途。