"OGNL是Struts2框架中默认的表达式语言,用于访问和操作对象的属性。本文档主要介绍了OGNL的一些关键符号及其在Struts2中的应用。"
在Struts2框架中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,它允许开发者以简洁的方式访问和操作对象的属性、方法,以及处理对象结构图的导航。OGNL的符号在Struts2中扮演着重要角色,尤其是`#`符号,它有多种用途:
1. **访问OGNL上下文和Action上下文**:
`#`符号可以用来访问OGNL上下文(OGNLContext)和Action上下文。在Struts2中,`#`通常代表`ActionContext.getContext()`,这使得我们能够获取到当前请求的上下文信息。例如,`#attr`、`#request`、`#session`、`#application`分别用于访问请求、会话、应用程序范围内的属性。以下是一些示例:
- `<s:property value="#attr.p.doSomeThing('王八')"/>`:调用Action中名为`p`的属性的`doSomeThing`方法,并传递参数 `'王八'`。
- `<s:property value="#parameters.id"/>`:读取请求参数中的`id`值。
- `<s:property value="#request.r"/>`、`<s:property value="#session.s"/>`、`<s:property value="#application.a"/>`:分别读取请求、会话和应用程序范围内的属性值。
2. **构造Map**:
`#`还可以用于构造Map,例如:
```
<s:iterator value="#{'china':'中国','usa':'美国','e':'俄国'}" var="c">
<s:property value="#c.key"/>--<s:property value="#c.value"/>
</s:iterator>
```
上述代码创建了一个Map并迭代,显示键值对。
3. **过滤和投影(projecting)集合**:
OGNL提供了几种特殊的符号来处理集合:
- `?`:选择所有匹配逻辑的元素,例如`list.?property`将返回所有`list`中`property`为真(非null)的元素。
- `^`:提取符合选择逻辑的第一个元素,如`list.^property`返回第一个满足条件的元素。
- `$`:提取符合选择逻辑的最后一个元素,如`list.$property`返回最后一个满足条件的元素。
4. **Struts2标签库**:
除了OGNL符号外,Struts2还提供了一系列标签库,包括控制标签(如`if`, `iterator`等)和数据标签(如`bean`, `date`, `set`等)。这些标签简化了视图层的开发,使开发者能够方便地进行条件判断、循环、数据展示等操作。
Struts2的学习过程中,掌握OGNL的使用至关重要,因为它贯穿于Action、视图以及数据绑定等多个环节,有效提高了开发效率和代码的可读性。理解并熟练运用OGNL的各种符号,能帮助开发者更好地利用Struts2框架实现复杂的功能。