Struts2框架中的OGNL表达式与标签应用解析
需积分: 4 172 浏览量
更新于2024-09-14
收藏 42KB DOC 举报
"struts2标签和OGNL表达式"
在Struts2框架中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于数据绑定和表达式评估。它是Struts2的默认表达式语言,相较于EL(Expression Language)提供了更丰富的功能,如对象方法调用、静态方法调用、值访问以及对集合对象的操作。
1. OGNL表达式语言特性
- **对象方法调用**:你可以直接在OGNL表达式中调用对象的方法,例如`xxx.sayHello()`。
- **类静态方法调用和值访问**:OGNL允许调用类的静态方法或访问其值,使用`@[类全名]@[方法名|值名]`的格式,例如`@java.lang.String@format('foo%s', 'bar')`或`@cn.itcast.Constant@APP_NAME`。
- **操作集合对象**:OGNL支持对列表、数组、映射等集合对象进行操作,能够方便地获取、修改集合中的元素。
2. 上下文(Context)与ValueStack
- **上下文(Context)**:在OGNL中,上下文是一个实现了`java.util.Map`接口的数据结构,它在Struts2中由`ActionContext`类实现。上下文包含了请求、会话、应用程序范围的属性,以及`OgnlValueStack`对象,如`#application`、`#session`和`#request`。
- **ValueStack**:根对象(Root Object),即`OgnlValueStack`,它是一个对象栈,用于存储一组对象。`OgnlValueStack`中的`root`变量是一个`List`,用于保存这些对象。栈顶对象是默认访问的对象,当在OGNL表达式中直接引用属性时,会从栈顶对象开始查找属性。
3. 访问对象和属性
- 如果要访问栈顶对象的属性,可以直接在OGNL表达式中写属性名,如`<s:property value="name"/>`。如果栈顶对象没有该属性,OGNL会向下遍历栈中的下一个对象,直至找到属性或者遍历结束。
4. Struts2标签与OGNL的结合
- 在Struts2中,OGNL表达式通常与Struts2的标签一起使用,如`s:property`标签,它允许我们通过OGNL表达式来访问和显示Action对象的属性。例如,`<s:property value="user.name"/>`会尝试查找并显示`User`对象的`name`属性。
5. OGNL表达式的使用场景
- 表单字段的值绑定:将表单输入与Action对象的属性绑定,如`<s:textfield name="username" />`。
- 控制逻辑:在JSP中动态控制页面元素的显示,如条件判断`<s:if test="user.isAdmin">`。
- 数据传递:在Action到Action之间,或者Action到视图之间传递数据。
总结,OGNL是Struts2中不可或缺的一部分,它极大地增强了框架的数据处理能力,使得开发者可以更加灵活地操作和展示数据。通过理解和熟练使用OGNL表达式,可以提高开发效率,简化代码,同时充分利用Struts2提供的强大功能。
2021-10-20 上传
2019-04-10 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
2020-09-03 上传
2019-06-01 上传
天泰路小王爷
- 粉丝: 9
- 资源: 41
最新资源
- 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语言构建高效分布式网络爬虫