OGNL表达式详解与Struts2实战
需积分: 11 63 浏览量
更新于2024-09-14
1
收藏 82KB DOC 举报
"OGNL表达式是一种强大的表达式语言,常用于Struts2框架中,用于数据绑定和访问对象属性。这篇个人学习笔记总结了OGNL的关键概念和常用符号,旨在帮助读者理解和掌握其用法。"
1. OGNL的核心对象
- **上下文对象** (OgnlContextMap): 这是一个特殊的Map结构,包含多个作用域(如request、session、application)的副本,以及其他信息。`_valueMap`集合存储这些作用域的数据,而`_root`则保存对象栈中的数据引用,通常指向当前的Action对象。通过`valueStack.set("msg", "msgxxx")`,数据首先会被放入Map中,然后Map被放入值栈的root(List)集合中。此外,可以直接将其他对象添加到root,如`valueStack.getRoot().add(0, new Person())`。
2. OGNL支持的符号
- `#`: 用于访问非根元素中的数据,即Map上下文中的数据,无法直接访问root中的元素。
- `$`: 类似于JSTL,但增加了在配置文件中使用的功能。
- `@`: 用于调用静态方法。
- `%`: 当标签属性值被视为字符串时, `%{}` 告诉执行环境其中的内容是OGNL表达式,这是一种通用的写法。
3. 结合Struts2的`property`标签使用OGNL
- 在JSP页面中,可以使用`#`声明Map,例如`#{}`。例如,`<s:property value="#request.username"/>`用于访问request作用域内的`username`属性。
- `#`的用法还可以访问OGNL上下文和Action上下文,如`#session.username`、`#application.username`、`#attr.username`等。
- 对于参数值的访问,如`<s:property value="#parameters.cid[0]"/>`,可以获取URL参数`cid`的第一个值。
4. EL表达式与OGNL的比较
- EL表达式 (`${}`) 通常用于获取不同作用域的值,例如`${requestScope.username}`、`${sessionScope.username}`、`${applicationScope.username}`、`${username}`(默认为pageContext)和`${param.cid}`(请求参数)。
- OGNL可以通过`#`访问相同的作用域,但提供了更丰富的表达能力,如动态属性访问和方法调用。
5. 实例应用
- 在实际开发中,OGNL允许更复杂的表达式,如访问嵌套属性、执行方法、条件判断等,使得数据访问和操作更为灵活。例如,`<s:if test="#session.user.isAdmin">`会检查用户是否具有管理员权限。
通过理解和熟练运用这些OGNL表达式和符号,开发者可以更有效地在Struts2框架中进行数据交互和控制逻辑。这不仅提高了代码的可读性,也提升了开发效率。
2014-03-26 上传
2012-06-27 上传
2015-10-30 上传
2012-01-29 上传
2009-12-02 上传
闷闷孩儿
- 粉丝: 1
- 资源: 18
最新资源
- 探索数据转换实验平台在设备装置中的应用
- 使用git-log-to-tikz.py将Git日志转换为TIKZ图形
- 小栗子源码2.9.3版本发布
- 使用Tinder-Hack-Client实现Tinder API交互
- Android Studio新模板:个性化Material Design导航抽屉
- React API分页模块:数据获取与页面管理
- C语言实现顺序表的动态分配方法
- 光催化分解水产氢固溶体催化剂制备技术揭秘
- VS2013环境下tinyxml库的32位与64位编译指南
- 网易云歌词情感分析系统实现与架构
- React应用展示GitHub用户详细信息及项目分析
- LayUI2.1.6帮助文档API功能详解
- 全栈开发实现的chatgpt应用可打包小程序/H5/App
- C++实现顺序表的动态内存分配技术
- Java制作水果格斗游戏:策略与随机性的结合
- 基于若依框架的后台管理系统开发实例解析