ONGL 表达式
OGNL 是 Object Graphic Navigation Language(对象图导航语言)的缩写,OGNL 是一个开源项目,读者可以访问其官方站点
www.ognl.org 以获得源代码和相关资料。OGNL 是一种功能强大的 EL(Expression Language,表达式语言),可以通过简单的
表达式来访问 Java 对象中的属性,而不是直接调用对象的获取和设置方法可以提供许多应用。比如在 XML 文件或者脚本文件
中嵌入 OGNL 表达式语法,在 JSP 页面展现层使用 OGNL 表达式语法。类似的应用有 Velocity,Freemark,Webwork。OGNL 先在
WebWork 项目中得到应用,也是 Struts 2 框架视图默认的表达式语言,可以说,OGNL 表达式是 Struts 2 框架的特点之一。
一、OGNL 基础知识
OGNL 是将视图元素(例如 textfield、combobox 等)同模型对象绑定在一起的一种语言。使用 OGNL 的类型转换功能,会使类
型转换变得更加简单(例如将一个字符串类型转换为一个整数类型)。
表格元素同 Swing TableModel 对应的一种数据源语言。
可以将 Web 页面元素同后台服务器业务对象对应起来。
比 JSTL(JSP 标准标签库)表达更加丰富。
OGNL 语法
OGNL 支持丰富的表达式,单语法很简单。例如有一个 man 对象,该对象有一个 name 属性,那么使用 OGNL 来获得该 name
属性可以使用如下表达式:
man.name
OGNL 表达式的基础单元称为导航链,简称为链。一个最简单的链由如下部分组成。
+++ ★ 说明 ★
OGNL 表达式基于 OGNL 上下文中的当前对象,一个“链”将使用上一个“链”的处理结果,开发者可以任意扩展该链的长度 ,
OGNL 没有限制。
例如,一个 OGNL 表达式如下:
name.toCharArray()[0].numericValue.toString()+
该表达式将按照如下步骤求值。
(1)获得 OGNL Context 中初始对象或者是根对象(root 对象)的 name 对象。
(2)调用 toCharArray()方法,返回一个 String 类型对象。
(3)获得该 String 对象的第一个字符。
(4)获得该字符的 numericValue 属性(该字符为一个 Character 对象,该对象有一个 getNumericValue()方法,该方法返回一个
Integer 类型值)。
(5)将获得的 Integer 对象转换为一个 String 类型值(使用 toString()方法)。
再例:
注:使用 OGNL 表达式,需要在 www.ognl.org 网站下载一个 ognl.jar 插件包,将该文件复制到 classpath 路径下即可。建立一个
复合类型,如代码 8.1 所示。
Struts2 已包含此包:ognl-2.6.11.jar
(一)定义类:Team,Person
import java.util.Date;
//团队类
public class Team {