何为OGNL? - HRY23大杂烩 06.11.07 阅读:172 公众公开 相关文章(14) | |||||||||
OGNL 是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功 能。如果一个OGNL表达式在括号前没有逗号,那么OGNL会把第一表达式的结果作为另一个表达式来赋值,而括号中表达式的结果会作为root object指向那个表达式。OGNL将Lambda表达式作为常量来处理。基本概念OGNL全称是Object-Graph Navigation Language,是一个用来获取和设置JAVA对象的属性的表达式语言。通过使用表达式语法导航对象图,而不是直接调用对象的获取和设置方法可以提供许多应用。比如在XML文件或者脚本文件中嵌入OGNL表达式语法,在JSP页面展现层使用OGNL表达式语法。类似的应用有Velocity,Freemark,Webwork。 如何使用最简单的使用是直接使用ognl.Ognl类来评估一个OGNL表达式。 Ognl类提供一些静态方法用来解析和解释OGNL表达式,最简单的示例是不使用上下文从一个对象中获取某个表达式的值,示例如下:
上述代码将基于root对象评估expression,返回结果,如果表达式有错,比如没有找到指定的属性,将抛出OgnlException。 更复杂一点的应用是使用预解析的表达式。这种方式允许评估表达式前捕获解析错误,也允许缓存解析出来的表达式进一个AST供重得使用从而提高性能。Ognl的parseExpression方法就是用来执行预解析操作的。 Ognl类的获取和设置方法大都可以接受一个context map参数,是一个Map类型的对象,允许你一些自己的变量进去,缺省的上下文里只包含#root和#context两个键。 Ognl内部会用这个Map替换OgnlContext类的缺省的map属性。Ognl的一些addDefaultContext方法就是完成这些功能的。 OgnlContext提供一些设置,可以更改OGNL的缺省行为,比如TypeConverter接口实例用来改变类型转换行为,具体可以参见相关文档。 下面的示例展示如何从root对象中解析出documentName属性,然后将当前用户名称添加到返回的结果后面:
基本语法OGNL的语法正变得越来越丰富,但是基本语法是没有什么改变的。比如要获取一个对象的name属性,OGNL表达式就是name,要获取一个对象的headline属性的text属性,OGNL表达式就是headline.text。 OGNL表达式的基本单位是导航链。最简单的链包含如下部分:
所有的OGNL表达式都基于当前对象的上下文来评估,导航链的示例如下:
评估步骤如下:
参考资料 |
OGNL介绍
最新推荐文章于 2024-09-12 23:20:52 发布