"OGNL在Struts2中的应用与示例" 在Struts2框架中,OGNL(Object Graph Navigation Language)扮演着至关重要的角色,它作为核心表达式语言,使得开发者能够方便地读写Action中的数据,从而简化视图层的实现。下面将详细介绍OGNL的使用、其在Struts2中的作用以及一些基础概念。 首先,OGNL表达式的使用非常直观且强大。在Struts2中,我们经常可以看到如`user.username`这样的表达式,它用于从Action传递的数据中获取或设置`user`对象的`username`属性。这不仅减少了在视图层的Java脚本代码,提高了代码的可读性,还使得视图层和业务逻辑之间的解耦更加明显。 当比较OGNL与JSP2.0内置的EL表达式时,虽然两者都可以简化数据访问,但OGNL的功能更为全面。例如,OGNL支持直接调用对象的方法,执行静态或实例方法,甚至可以进行集合的投影和动态lambda表达式定义,这些都是JSP EL所不具备的特性。 在OGNL的基础概念中,`OGNL上下文`是一个关键元素。它是一个Map对象,由`ognl.OgnlContext`类实现,用于存储和检索表达式中涉及的对象和变量。上下文分为两部分:栈顶上下文(Top of Stack, TOS)和根上下文(Root Context)。栈顶上下文通常包含Action对象,而根上下文则可能包含全局的、线程安全的变量。通过上下文,OGNL可以访问到对象的任意深度属性,包括集合和数组的元素。 OGNL表达式的语法非常灵活,它可以处理以下几种情况: 1. **属性访问**:`object.property`,如`user.username`,用来获取或设置对象的属性值。 2. **方法调用**:`object.method()`,如`list.size()`,调用对象的方法。 3. **索引访问**:`array[index]`或`map[key]`,访问数组或映射中的元素。 4. **集合投影**:`collection[expression]`,选取集合中满足特定条件的元素。 5. **动态方法/属性**:`object['method']()`或`object['property']`,根据字符串动态调用方法或获取属性。 6. **类型转换**:OGNL会自动尝试将结果转换为目标类型,也可以通过`@TypeConverters`注解自定义类型转换。 在实际开发中,Struts2对OGNL进行了增强,使其更好地适应MVC框架的需求。例如,Struts2提供了`ValueStack`,它是一个对象栈,允许视图层通过简单的表达式访问Action中的任何对象。当使用`<s:property>`标签时,Struts2会自动在ValueStack中查找并返回匹配的属性值。 OGNL在Struts2中的应用极大地提升了视图层的简洁性和灵活性,使得开发者可以专注于业务逻辑,而不是繁琐的数据绑定代码。通过深入理解和熟练使用OGNL,可以提高开发效率,并创建出更加优雅的Struts2应用程序。
在struts2 2.3.15.1版本中将jsp页面中的<c:if test="${empty pageFinder.data }"> <td colspan=13 align="center” height="25"xfont color="red"没有查询到相关记录</f</c:if> <s:iterator value="%{pageFinder.data}" var="rehs” status="status"><s:set var="index”value="#status getIndex()"/> 这段代码中的<s:iterator value="%{pageFinder.data}"改为<s:iterator value="${pageFinder.data}"系统会报does not accept any expressions这个错误,是什么原因? theAIS -
粉丝: 52
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理
展开
- 我的资源
快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分
登录查看自己的积分
- 我的C币
登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
-
JDK 17 Linux版本压缩包解压与安装指南
-
C++/Qt飞行模拟器教员控制台系统源码发布
-
TensorFlow深度学习实践:CNN在MNIST数据集上的应用
-
鸿蒙驱动HCIA资料整理-培训教材与开发者指南
-
凯撒Java版SaaS OA协同办公软件v2.0特性解析
-
AutoCAD二次开发中文指南下载 - C#编程深入解析
-
C语言冒泡排序算法实现详解
-
Pointofix截屏:轻松实现高效截图体验
-
Matlab实现SVM数据分类与预测教程
-
基于JSP+SQL的网站流量统计管理系统设计与实现
-
C语言实现删除字符中重复项的方法与技巧
-
e-sqlcipher.dll动态链接库的作用与应用
-
浙江工业大学自考网站开发与继续教育官网模板设计
-
STM32 103C8T6 OLED 显示程序实现指南
-
高效压缩技术:删除重复字符压缩包
-
JSP+SQL智能交通管理系统:违章处理与交通效率提升
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证 文档复制为VIP权益,开通VIP直接复制 信息提交成功
- 粉丝: 52
- 资源: 2万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- JDK 17 Linux版本压缩包解压与安装指南
- C++/Qt飞行模拟器教员控制台系统源码发布
- TensorFlow深度学习实践:CNN在MNIST数据集上的应用
- 鸿蒙驱动HCIA资料整理-培训教材与开发者指南
- 凯撒Java版SaaS OA协同办公软件v2.0特性解析
- AutoCAD二次开发中文指南下载 - C#编程深入解析
- C语言冒泡排序算法实现详解
- Pointofix截屏:轻松实现高效截图体验
- Matlab实现SVM数据分类与预测教程
- 基于JSP+SQL的网站流量统计管理系统设计与实现
- C语言实现删除字符中重复项的方法与技巧
- e-sqlcipher.dll动态链接库的作用与应用
- 浙江工业大学自考网站开发与继续教育官网模板设计
- STM32 103C8T6 OLED 显示程序实现指南
- 高效压缩技术:删除重复字符压缩包
- JSP+SQL智能交通管理系统:违章处理与交通效率提升