OGNL深入指南:对象图形导航语言解析
需积分: 10 96 浏览量
更新于2024-07-29
收藏 170KB PDF 举报
"OGNL语言是用于Java对象的getter和setter属性表示及绑定的语言,常用于GUI绑定、类型转换、Web组件绑定等场景。"
OGNL(Object Graph Navigation Language,对象图形导航语言)是一种强大的表达式语言,设计用于方便地访问和操作Java对象的属性。它的名称发音类似于"orthogonal"的醉酒发音。OGNL的主要目的是简化对象图的导航,使得开发者能够轻易地获取和设置对象的属性值。
### 历史
OGNL起源于解决GUI组件与控制器之间属性绑定的需求。随着复杂性增加,Drew Davidson在Luke Blanshard的推动下创建了KVCL(Key-Value Coding Language),后来发展成了现在的OGNL。OGNL提供了比Java更丰富的功能,如列表映射、选择操作以及类似lambda的表达式。
### 语法与表达式
OGNL的表达式可以包括常量、引用属性、下标、调用方法、变量引用等多种形式:
- **常量**:直接写入的值,如字符串、数字等。
- **引用属性**:通过`.`操作符访问对象的属性,如`object.property`。
- **下标**:使用方括号`[]`操作符访问数组、列表或映射的元素,如`array[index]`或`map[key]`。
- **JavaBean小标属性**:对于JavaBean的属性,可以使用`bean.propertyName`方式访问。
- **OGNL对象索引属性**:支持更复杂的属性路径,如`object.property[index].subProperty`。
- **调用方法**:使用`object.method()`调用对象的方法。
- **变量引用**:通过变量名访问已定义的变量。
- **括号表达式**:用括号包裹表达式,用于计算优先级或分组。
- **链式子表达式**:连续的属性或方法调用,如`object.property1.property2()`。
### 构造集合
OGNL还支持动态构造各种集合类型,如List、数组和Map:
- **List**:`#{}`可以创建一个新的List,如`#{'a', 'b', 'c'}`。
- **原生数组**:`[]`创建原生数组,如`['a', 'b', 'c']`。
- **Map**:`#{key1: value1, key2: value2}`创建Map对象。
### 集合操作
OGNL提供了多种集合操作,如投影和选择:
- **集合投影**:`collection.projectionExpression`用于提取集合中满足条件的部分。
- **选择元素**:`collection[condition]`选择满足特定条件的第一个元素。
- **选择第一个匹配元素**:`collection[0]`选取集合中的第一个元素。
- **选择最后一个元素**:`collection[-1]`选取集合中的最后一个元素。
### 方法调用与构造函数
OGNL可以调用对象的构造函数和静态方法,获取静态成员:
- **调用构造函数**:`new ClassName(args)`创建类的新实例。
- **调用静态方法**:`ClassName.staticMethod(args)`执行类的静态方法。
- **获得静态成员**:`ClassName.staticField`访问类的静态字段。
### 表达式求值与类型转换
- **表达式求值**:OGNL表达式会被求值为一个特定的Java类型。
- **伪Lambda表达式**:类似于lambda的简写形式,用于函数式编程风格。
- **强制对象到类型的转换**:OGNL支持将对象转换为Boolean、Number、Integer或Collection。
### 运算符
OGNL具有丰富的运算符集,包括赋值和取值运算符,以及与Java不同的其他运算符。
### 总结
OGNL作为强大的表达式语言,广泛应用于Struts2等框架,简化了数据绑定和表达式处理,提高了开发效率,并提供了丰富的功能来处理复杂的对象结构和集合操作。它的灵活性和表达能力使其成为Java世界中不可或缺的工具。
2010-12-15 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
flywcs
- 粉丝: 0
- 资源: 3
最新资源
- Android圆角进度条控件的设计与应用
- mui框架实现带侧边栏的响应式布局
- Android仿知乎横线直线进度条实现教程
- SSM选课系统实现:Spring+SpringMVC+MyBatis源码剖析
- 使用JavaScript开发的流星待办事项应用
- Google Code Jam 2015竞赛回顾与Java编程实践
- Angular 2与NW.js集成:通过Webpack和Gulp构建环境详解
- OneDayTripPlanner:数字化城市旅游活动规划助手
- TinySTM 轻量级原子操作库的详细介绍与安装指南
- 模拟PHP序列化:JavaScript实现序列化与反序列化技术
- ***进销存系统全面功能介绍与开发指南
- 掌握Clojure命名空间的正确重新加载技巧
- 免费获取VMD模态分解Matlab源代码与案例数据
- BuglyEasyToUnity最新更新优化:简化Unity开发者接入流程
- Android学生俱乐部项目任务2解析与实践
- 掌握Elixir语言构建高效分布式网络爬虫