OGNL表达式详解与Struts2实战

需积分: 11 3 下载量 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框架中进行数据交互和控制逻辑。这不仅提高了代码的可读性,也提升了开发效率。