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 例外被抛出, 因为链中的最后一个元素, 既不是属性名, 也不是数组索引.

上面这一点点语法已经足够完成你最常见的那些需求了.

posted on 2016-07-11 18:44  雪的心  阅读(527)  评论(0编辑  收藏  举报

导航