OGNL中#、%和$的用法

1、OGNL中#的用法

(1) 访问非根对象(struts中根对象为值栈,OGNL要结合struts标签来使用),如OGNL上下文和Action上下文,#相当于ActionContext.getContext(),如:
#parameters.id[0]作用相当于request.getParameter("id")
#request.userName相当于request.getAttribute("userName")

#session.userName相当于session.getAttribute("userName")

#application.userName相当于application.getAttribute("userName")

#attr.userName相当于按request > session > application顺序在以上范围(scope)内读取 userName属性,直到找到为止。

(2) 用于过滤和投影(projecting)集合,如: 

books.{?#this.price>35}

(3) 构造Map,如: 

#{'foo1':'bar1', 'foo2':'bar2'},这种方式常用在给radio、select或checkbox等标签赋值上,如果要在页面中取出该map的值可以这样写:<s:property value="#myMap['foo1']"/>

2、OGNL中%的用法

“%”符号的用途是在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是OGNL表达式,并计算OGNL表达式的值,如:

<s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/> 
<s:property value="#myMap['key1']"/> 
<s:url value="#myMap['key1']" />   
上面代码的第2行会在页面上输出“value1”,而第3行则会输出"#myMap['key1']"这么一个字符串,如果将第3行改写成<s:url value="%{#myMap['key1']}"/>则输出为“value1”,这说明struts2里不同的标签对ognl的表达式的理解是不一样的
如果标签“看不懂”类似“#myMap['key1']”的语句时,就要用%{}来把括进去“翻译”一下

3、OGNL中$的用法

$广泛应用于EL中,而“$”在OGNL中有两种用途:
(1) 在国际化资源文件中引用OGNL表达式,如:

reg.agerange=年龄必须在${min}同${max}之间!
(2) 在Struts 2配置文件中引用OGNL表达式,如:
<action name="saveUser" class="userAction" method="save">
<result type="redirect">listUser.action?msg=${msg}</result>
</action>

或者:

<validators>
<field name="intb">
<field-validator type="int">
<param name="min">10</param>     
<param name="max">100</param>     
<message>数字必须为${min}为${max}之间!</message>     
</field-validator>     
    </field>     
</validators>  

你可能感兴趣的:(OGNL中#、%和$的用法)