Struts2框架中的OGNL表达式与标签应用解析
3星 · 超过75%的资源 需积分: 4 129 浏览量
更新于2024-09-30
收藏 42KB DOC 举报
"struts2标签和OGNL表达式"
在Struts2框架中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于在视图层与模型层之间进行数据绑定和传递。它是Struts2的默认表达式语言,提供了一种灵活的方式来访问和操作Java对象的属性。与简单的EL(Expression Language)相比,OGNL提供了更丰富的功能,如支持对象方法调用、静态方法调用、集合操作等。
1. OGNL表达式语言特点
- **对象方法调用**:OGNL允许直接调用对象的方法,例如`xxx.sayHello()`,这在处理业务逻辑时非常方便。
- **静态方法调用**:你可以通过`@[类全名(包括包路径)]@[方法名|值名]`的格式调用类的静态方法,例如`@java.lang.String@format('foo%s', 'bar')`。
- **集合操作**:OGNL支持对集合对象的操作,如遍历、过滤、映射等,使得在模板中处理集合数据变得简单。
2. OGNL上下文(Context)
OGNL上下文是一个实现了`java.util.Map`接口的数据结构,用于存储和检索数据。在Struts2中,这个上下文通常由`ActionContext`实现,包含了`request`、`session`、`application`等Web相关的域对象。这些对象可以通过`#request`、`#session`和`#application`来访问。
3. 根对象(Root Object)与ValueStack
Struts2的根对象是`ValueStack`,它的实现类为`OgnlValueStack`。`ValueStack`不是一个简单的值容器,而是一个对象列表,其中的对象可以按照栈的原理进行访问。栈顶对象通常是当前处理的Action对象,可以直接通过属性名访问其属性。如果栈顶对象没有所需属性,OGNL会向下遍历栈中其他对象,直到找到匹配的属性。
4. 访问策略
当在OGNL表达式中直接指定属性名时,比如`<s:property value="name"/>`,Struts2会从`ValueStack`的栈顶开始查找`name`属性。如果在栈顶对象找不到,会继续向下查找,直到找到为止。这种机制使得我们可以轻松地在不同上下文中访问和显示数据。
5. 结合Struts2标签使用
OGNL表达式通常与Struts2的标签结合使用,如`s:property`、`s:if`、`s:iterator`等。这些标签配合OGNL表达式,能够动态地显示和控制页面元素,根据模型数据的变化自动更新视图。
总结起来,OGNL是Struts2中不可或缺的一部分,它为开发者提供了强大且灵活的数据访问手段,使得在视图层和模型层之间的数据交互变得更加简单和直观。通过深入理解OGNL表达式和与其结合使用的Struts2标签,可以更高效地构建基于Struts2的Web应用程序。
2021-10-20 上传
2019-04-10 上传
2023-05-16 上传
2023-09-16 上传
2024-05-28 上传
2023-07-13 上传
2023-06-06 上传
2023-05-21 上传
2023-04-14 上传
在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这个错误,是什么原因? 2023-06-07 上传 华夏勇者 -
粉丝: 3
- 资源: 53
最新资源
-
掌握数学建模:层次分析法详细案例解析
-
JSP项目实战:广告分类系统v2.0完整教程
-
如何在没有蓝牙的PC上启用并使用手机蓝牙
-
SpringBoot与微信小程序打造游戏助手完整教程
-
高效管理短期借款的Excel明细表模板
-
兄弟1608/1618/1619系列复印机维修手册
-
深度学习模型Sora开源,革新随机噪声处理
-
控制率算法实现案例集:LQR、H无穷与神经网络.zip
-
Java开发的HTML浏览器源码发布
-
Android闹钟程序源码分析与实践指南
-
H3C S12500R升级指南:兼容性、空间及版本过渡注意事项
-
Android仿微信导航页开门效果实现教程
-
深度研究文本相似度:BERT、SentenceBERT、SimCSE模型分析
-
Java开发的zip压缩包查看程序源码解析
-
H3C S12500S系列升级指南及注意事项
-
全球海陆掩膜数据解析与应用
2023-06-07 上传
华夏勇者
- 粉丝: 3
- 资源: 53
最新资源
- 掌握数学建模:层次分析法详细案例解析
- JSP项目实战:广告分类系统v2.0完整教程
- 如何在没有蓝牙的PC上启用并使用手机蓝牙
- SpringBoot与微信小程序打造游戏助手完整教程
- 高效管理短期借款的Excel明细表模板
- 兄弟1608/1618/1619系列复印机维修手册
- 深度学习模型Sora开源,革新随机噪声处理
- 控制率算法实现案例集:LQR、H无穷与神经网络.zip
- Java开发的HTML浏览器源码发布
- Android闹钟程序源码分析与实践指南
- H3C S12500R升级指南:兼容性、空间及版本过渡注意事项
- Android仿微信导航页开门效果实现教程
- 深度研究文本相似度:BERT、SentenceBERT、SimCSE模型分析
- Java开发的zip压缩包查看程序源码解析
- H3C S12500S系列升级指南及注意事项
- 全球海陆掩膜数据解析与应用