OGNL中的#、%和$符号用法说明
### OGNL中的#、%和$符号用法说明 #### 概述 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。它在许多Java应用框架中得到了广泛应用,尤其是在Struts2中作为默认的表达式语言。OGNL中的`#`、`%`和`$`符号各有其独特的功能和应用场景,对于理解和熟练使用这些符号至关重要。 #### #符号的用途 1. **访问根对象属性** `#`符号常被用来访问根对象的属性。在Struts2框架中,值栈被视为根对象。因此,当需要访问其他非根对象时,通常会在对象名称前加上`#`来指明这一点。例如,在`#session.msg`这个表达式中,`#session`指向了`ActionContext`中的`Session`,等价于`ActionContext.getContext().getSession().getAttribute("msg")`。 2. **过滤和投影集合** `#`还可以用来对集合进行过滤和投影操作。具体来说,可以使用`{?#this.property}`这样的形式来过滤集合中的元素。例如,假设有一个名为`persons`的集合,若想筛选出所有年龄大于20的人,则可以使用`persons.{?#this.age > 20}`这样的表达式。 3. **构造Map** 此外,`#`还被用来创建一个新的Map。例如,`#{'foo1': 'bar1', 'foo2': 'bar2'}`将创建一个包含两个键值对的Map。 #### %符号的用途 `%`符号主要用于计算OGNL表达式的值,尤其是在属性为字符串类型的场景下。例如: ```xml <s:set name="foobar" value="#{'foo1':'bar1','foo2':'bar2'}"/> <p>The value of key "foo1" is <s:property value="#foobar['foo1']"/></p> <p>不使用%:<s:url value="#foobar['foo1']"/></p> <p>使用%:<s:url value="%{#foobar['foo1']}"/></p> ``` 在这个例子中,如果不使用`%`符号,`#foobar['foo1']`会被直接当作一个字符串处理;而使用`%`后,则会计算该表达式的值,并将其结果作为一个字符串来使用。 #### $符号的用途 1. **国际化资源文件中引用OGNL表达式** 在国际化资源文件中,可以使用`$`符号来引用OGNL表达式。例如,下面这段国际化资源文件中的代码: ```properties reg.age.range=国际化资源信息:年龄必须在${min}到${max}之间。 ``` 这里`$`被用来引用表达式`${min}`和`${max}`,其中`min`和`max`是通过其他方式传递进来的变量或属性。 2. **Struts2框架配置文件中引用OGNL表达式** 在Struts2的配置文件中,也可以利用`$`符号来引用OGNL表达式。例如,在下面的验证规则配置中: ```xml <validators> <field name="intb"> <field-validator type="int"> <param name="min">10</param> <param name="max">100</param> <message>BAction-test校验:数字必须为${min}到${max}之间!</message> </field-validator> </field> </validators> ``` 这里的`message`属性中使用了`${min}`和`${max}`来动态构建错误消息,这里的`$`同样起到了引用表达式的作用。 #### 总结 `#`、`%`和`$`这三个符号在OGNL表达式中扮演着不同的角色,分别用于访问根对象属性、计算字符串类型的表达式值以及引用OGNL表达式。熟练掌握它们的用法可以帮助开发者更高效地利用OGNL表达式进行数据处理和动态内容生成。
- 粉丝: 1
- 资源: 266
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助