基本概念
OGNL全称是Object-Graph Navigation Language,是一个用来获取和设置JAVA对象的属性的表达式语言。通过使用表达式语法导航对象图,而不是直接调用对象的获取和设置方法可以提供许多应用。比如在XML文件或者脚本文件中嵌入OGNL表达式语法,在JSP页面展现层使用OGNL表达式语法。类似的应用有Velocity,Freemark,Webwork。
如何使用
最简单的使用是直接使用ognl.Ognl类来评估一个OGNL表达式。 Ognl类提供一些静态方法用来解析和解释OGNL表达式,最简单的示例是不使用上下文从一个对象中获取某个表达式的值,示例如下:
java 代码
- import ognl.Ognl; import ognl.OgnlException;
- try {
- result = Ognl.getValue(expression, root);
- }
- catch (OgnlException ex)
- {
-
- }
上述代码将基于root对象评估expression,返回结果,如果表达式有错,比如没有找到指定的属性,将抛出OgnlException。
更复杂一点的应用是使用预解析的表达式。这种方式允许评估表达式前捕获解析错误,也允许缓存解析出来的表达式进一个AST供重得使用从而提高性能。Ognl的parseExpression方法就是用来执行预解析操作的。
Ognl类的获取和设置方法大都可以接受一个context map参数,是一个Map类型的对象,允许你一些自己的变量进去,缺省的上下文里只包含#root和#context两个键。 Ognl内部会用这个Map替换OgnlContext类的缺省的map属性。Ognl的一些addDefaultContext方法就是完成这些功能的。
OgnlContext提供一些设置,可以更改OGNL的缺省行为,比如TypeConverter接口实例用来改变类型转换行为,具体可以参见相关文档。
下面的示例展示如何从root对象中解析出documentName属性,然后将当前用户名称添加到返回的结果后面:
java 代码
- private Map context = new HashMap();
-
- public void setUserName(String value)
- {
- context.put("userName", value);
- }
-
- ry {
-
- result = Ognl.getValue("userName"", context, root);
- } catch (OgnlException ex) {
-
- }
基本语法
OGNL的语法正变得越来越丰富,但是基本语法是没有什么改变的。比如要获取一个对象的name属性,OGNL表达式就是name,要获取一个对象的headline属性的text属性,OGNL表达式就是headline.text。
OGNL表达式的基本单位是导航链。最简单的链包含如下部分:
表达式组成部分
示例
属性名称 |
如上述示例中的name和headline.text |
方法调用 |
hashCode()返回当前对象的哈希码。 |
数组元素 |
listeners[TEC:0]返回当前对象的监听器列表中的第一个元素。 |
所有的OGNL表达式都基于当前对象的上下文来评估,导航链的示例如下:
java 代码
- name.toCharArray()[0].numericValue.toString()
评估步骤如下:
- 解析根对象的name属性。
- 调用上一步返回的结果字符串的toCharArray()方法。
- 获取返回的结果数组的第一个字符,是一个Character对象。
- 获取字符的数字值表示,Character有一个getNumericValue()方法。
- 调用结果Integer对象的toString()方法。
参考资料
API文档
语言规范
开发指南
分享到:
相关推荐
本案例提供ognl使用详解,测试通过,只需解压放入自己WEB项目中,执行struts_ognl包内java文件即可(未提供jia包,若需要可以联系留言发至邮箱),若测试不好可以联系本人提供指导. Struts 2默认的表达式语言是OGNL...
关于OGNL表达式的使用的整理以及提供的文档说明,ps:文档说明是英文的,可能需要翻译
struts2 中 OGNL表达式的使用struts2 中 OGNL表达式的使用
OGNL百度百科OGNL百度百科OGNL百度百科OGNL百度百科OGNL百度百科OGNL百度百科
struts符号的$,%,#使用,教你怎样使用struts中OGNL表达式。
ognl表达式 ognl表达式 ognl表达式 ognl表达式
ognl语言的使用。让我们通过使用ognl了解ognl标签使用的便利性。
很不错的资料 很详细的讲解了ognl的使用技巧
开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12...
camel-ognl-1.6.4.jar, camel-ognl-2.8.1.jar, com.springsource.org.ognl-2.6.9.jar, com.springsource.org.ognl-sources-2.6.9.jar, ognl-2.5.1.jar, ognl-2.6.11.jar, ognl-2.6.3.jar, ognl-2.6.5.jar, ognl-...
使用的ognl,正对是struts2 hibernate 等
OGNL 最初是为了能够使用对象的属性名来建立 UI 组件 (component) 和 控制器 (controllers) 之间的联系,简单来说就是:视图 与 控制器 之间数据的联系。后来为了应付更加复杂的数据关系,Drew Davidson 发明了一个...
Struts2 的OGNL使用简介实例 博文链接:https://zmx.iteye.com/blog/553748
ognl源码 ognl源码 ognl源码 ognl源码 ognl源码
赠送jar包:ognl-3.2.21.jar; 赠送原API文档:ognl-3.2.21-javadoc.jar; 赠送源代码:ognl-3.2.21-sources.jar; 赠送Maven依赖信息文件:ognl-3.2.21.pom; 包含翻译后的API文档:ognl-3.2.21-javadoc-API文档-...
赠送jar包:ognl-3.1.12.jar; 赠送原API文档:ognl-3.1.12-javadoc.jar; 赠送源代码:ognl-3.1.12-sources.jar; 赠送Maven依赖信息文件:ognl-3.1.12.pom; 包含翻译后的API文档:ognl-3.1.12-javadoc-API文档-...
ognl.jar ognl.jar
赠送jar包:ognl-3.2.21.jar; 赠送原API文档:ognl-3.2.21-javadoc.jar; 赠送源代码:ognl-3.2.21-sources.jar; 赠送Maven依赖信息文件:ognl-3.2.21.pom; 包含翻译后的API文档:ognl-3.2.21-javadoc-API文档-...
java的Struts中的OGNL标签的使用,详细介绍,比较实用。
ognl ognl 文件