Struts2中OGNL的使用详解
需积分: 10 68 浏览量
更新于2024-10-07
收藏 4KB TXT 举报
"本文主要介绍Struts2框架中OGNL(Object-Graph Navigation Language)的使用方法,包括基本语法和在Struts2中的应用。"
OGNL,全称为Object-Graph Navigation Language,是一种强大的表达式语言,用于获取和设置对象图中的属性。它在Struts2框架中扮演着核心角色,负责数据绑定、动作调用以及模板中的值表达。下面我们将详细探讨OGNL的用法。
1. **基本语法**
- **访问对象属性**:通过`.`操作符可以访问对象的属性,如`objName.methodName()`。这里的`objName`是对象名,`methodName`是该对象的方法名。
- **动态方法调用**:OGNL支持动态方法调用,可以执行如`@[java.lang.String@format('foo%s','bar')]`这样的表达式,其中`@`符号后跟类名,`format`是方法名,后面的参数被用作方法的参数。
- **计算表达式**:你可以使用OGNL进行简单的数学计算,例如`price=100,discount=0.8,calculatePrice()`,这个表达式假设存在一个`calculatePrice`方法,根据给定的`price`和`discount`计算出折扣后的价格。
- **OGNL上下文**:OGNL有一个上下文(OGNL context),允许你在表达式中存储和访问变量。在Struts2中,ActionContext就是OGNL context的一个重要部分,它可以访问请求、会话、应用等范围的属性。
2. **在Struts2中的应用**
- **标签支持**:Struts2的标签库如`s:property`等,内部使用OGNL来解析和显示对象的属性。
- **值栈**:Struts2的值栈是OGNL的主要工作区域,它包含一系列的对象,OGNL可以从栈顶开始查找属性,直到找到匹配的属性为止。
- **占位符与转义**:在使用OGNL时,需要注意字符转义。Struts2中的`%{...}`用于插入OGNL表达式,而`#`、`$`和`&`等特殊字符可能需要转义,例如`#`用`##`表示,`$`用`\$`表示,`&`用`\&`表示。
3. **访问不同作用域**
- **#parameters**:访问HTTP请求参数,相当于`request.getParameter("id")`。
- **#request**:访问HttpServletRequest中的属性,如`request.getAttribute("userName")`。
- **#session**:访问HttpSession中的属性,如`session.getAttribute("userName")`。
- **#application**:访问Servlet上下文中的属性,如`application.getAttribute("userName")`。
- **#attr**:这是一个通用的作用域访问器,根据请求、会话、应用的顺序查找属性。
总结起来,OGNL在Struts2中提供了强大的数据访问和表达能力,使得开发者能够方便地在视图层和控制层之间进行数据传递。掌握OGNL的用法对于理解并优化Struts2应用的逻辑至关重要。通过灵活运用OGNL,可以实现更加动态和丰富的页面展现,提高代码的可读性和可维护性。
2013-09-22 上传
2012-02-06 上传
2019-08-08 上传
2019-05-28 上传
2012-02-20 上传
2010-02-10 上传
2011-05-06 上传
2019-04-21 上传
巴拉圭
- 粉丝: 2
- 资源: 13
最新资源
- geoserver-2.12.5-mysql-plugin.zip
- 【WordPress主题】2022年最新版完整功能demo+插件v1.2.zip
- 基于STM32单片机单片机智能空气净化器控制系统(期末大作业)源码+详细文档+配套全部资料.zip
- 行业资料-电子功用-光电隔离式大功率无刷直流电机驱动装置及驱动反馈处理方法的说明分析.rar
- Excel模板-本科毕业实习地点意向调查表.rar
- swing-amd:AMD for swing - 可刷卡界面。 yesno 输入的 swipe-leftswipe-right 。 正如 Jelly 和 Tinder 等应用中所见
- appsync-realtime-vanillajs:使用基于AWS Appysnc构建的websocket的示例实时无服务器应用程序
- cpa-auth-provider:ETSI 103407的参考实施
- 华为技术有限公司C++语言编程规范.zip
- 基于 javaweb+Struts2 的书籍管理系统.zip
- 基于MATLAB的运动模糊图像复原算法研究.rar
- taskpaper-repeat:用于在TaskPaper 3中管理重复任务的脚本
- 998507896765240CH9121配置通讯协议.rar
- 行业资料-电子功用-光电耦合件及其使用的光电转换装置的说明分析.rar
- Djali-api:开发项目以结束Fatec Itapetininga的历程
- Excel人力资源模板51个.zip