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>  

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值