OgnlLanguageGuide ongl文档
### OGNL (Object Graph Navigation Language) 概述与应用 #### 一、简介 OGNL(Object Graph Navigation Language)是一种用于获取和设置 Java 对象属性的表达式和绑定语言。通常,同一种表达式既可用于获取属性值,也可用于设置属性值。OGNL 的发音类似于“正交”这个词的最后一个音节。 OGNL 在多个领域有着广泛的应用,例如: 1. **作为 GUI 元素与模型对象之间的绑定语言**:可以方便地在文本框、组合框等 GUI 元素与模型对象之间建立连接。OGNL 的类型转换机制使得不同类型的值转换变得更加简单(如将字符串转换为数字类型)。 2. **作为数据源语言**:可以在表格列与 Swing TableModel 之间进行映射。 3. **作为 Web 组件与底层模型对象之间的绑定语言**:被 WebOGNL、Tapestry、WebWork 和 WebObjects 等框架所采用。 4. **替代 Jakarta Commons BeanUtils 包或 JSTL 的 EL**:提供更强大的功能,支持更复杂的属性导航。 #### 二、历史背景 OGNL 最初由 Drew Davidson 开发,并于 2004 年由 OGNL Technology, Inc. 发布。自发布以来,它迅速成为 Java 社区中一个重要的工具,尤其是在 Web 开发和 GUI 应用中得到了广泛应用。 #### 三、语法与表达式 OGNL 支持丰富的表达式结构,包括常量、属性引用、索引、方法调用、变量引用、列表和映射构造等。 1. **常量**:如 `123` 或 `"hello"`。 2. **属性引用**:可以通过 `obj.prop` 访问对象 `obj` 的属性 `prop`。 3. **索引**: - **数组和列表索引**:如 `list[0]` 或 `array[1]`。 - **JavaBeans 索引属性**:使用 `obj['prop']`。 - **OGNL 对象索引属性**:同样使用 `obj['prop']` 形式。 4. **方法调用**:如 `obj.method()`. 5. **变量引用**:如 `var`。 6. **括号表达式**:如 `(expr)`。 7. **链式子表达式**:如 `obj.prop.method()`. 8. **集合构造**: - **列表**:如 `[1, 2, 3]`。 - **原生数组**:使用 `new int[]{1, 2, 3}`。 - **映射**:如 `{key1: value1, key2: value2}`。 9. **跨集合投影**:对集合中的每个元素执行操作。 10. **从集合选择**:根据条件从集合中选择元素。 11. **选择首个匹配项**:找到集合中第一个符合条件的元素。 12. **选择最后一个匹配项**:找到集合中最后一个符合条件的元素。 13. **构造器调用**:创建新对象。 14. **静态方法调用**:调用类中的静态方法。 15. **获取静态字段**:如 `Class.staticField`。 #### 四、表达式评估 OGNL 支持伪 Lambda 表达式和集合的伪属性。此外,OGNL 还定义了一些与 Java 不同的操作符,如用于比较和逻辑运算的特殊操作符。 1. **伪 Lambda 表达式**:通过函数式编程风格处理集合。 2. **集合的伪属性**:如 `list.first` 可以用来获取列表中的第一个元素。 3. **操作符**:OGNL 定义了一套专有的操作符集,包括但不限于算术操作符、比较操作符和逻辑操作符。 #### 五、对象类型的强制转换 OGNL 支持对象到特定类型的强制转换,包括布尔值、数值和集合等。 1. **作为布尔值解释的对象**:如将空集合解释为 `false`。 2. **作为数值解释的对象**:如将字符串 `"123"` 解释为整数 `123`。 3. **作为整数解释的对象**:如将浮点数 `123.0` 转换为整数 `123`。 4. **作为集合解释的对象**:可以将数组或其他可迭代对象转换为列表。 #### 六、OGNL 语言参考 OGNL 提供了一个详尽的语言参考,包括操作符表、特殊集合的伪属性等。 1. **操作符**:OGNL 定义了一系列操作符,用于各种表达式的构建。 2. **特殊集合的伪属性**:这些属性允许更简洁地访问集合中的元素,如 `list.last` 获取列表中的最后一个元素。 OGNL 是一个功能强大的工具,不仅在 Web 开发中有着广泛的应用,而且在 GUI 编程和数据处理方面也发挥着重要作用。通过掌握其基本语法和高级特性,开发者可以更高效地进行开发工作。
- xidian1022012-05-27很有用的笔记型文档
- marxxiong2013-12-14写的非常好
- 粉丝: 5
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助