关于Struts2中的“#”,“%”和“$”

在Struts2中使用OGNL时,经常会用到$,%,#这三个符号
1.“#”符号
“#”符号的主要作用如下:
(1)用于访问保存在Strack Context中的对象。当一个对象object保存在Strack Context中时,必须使用“#object”的形式去访问。
“#”符号相当于ActionContext.getContext()。因此,#session.msg相当于调用ActionContext.getContext().getSession().getAttribute("msg")。
(2)用于过滤和投影集合。例如:
#users.{?#this.age>30}
#users.{?#this.age>30}.{age}[0]
(3)用来构造Map对象集合。例如:
<s:radio list="#{1:'男',2:'女'}" label="性别" name="gender"/>中利用“#”构造了一个具有两个Map对象的集合,并利用该集合充当了radio标签的数据源。
2.“%”符号
在为Struts2标签的属性赋值时,除了使用常量外,还可以用OGNL表达式。通常,可以利用“%{”和“}”将OGNL表达式括起来,例如:
<s:property value="%{title}">
告诉Struts2将title的值作为value属性的值。
在不发生歧义的情况下,“%”通常可以省略。因此,上面的语句等价于:
<s:property value="title">
但是,下面的语句利用set标签定义了一个对象Page,并将其保存在Stack Context中,然后在a标签中将Page取出,计算下一页的地址,此时就不能省略“%”,即不能将“%{#page-1}”写成“{#page-1}”
<s:set name="Page" value="10" id="page"></s:set>
<s:a href="postDetail.action?page=%{#page-1}">上一页</s:a>
3."$"运算符
(1)在配置文件中使用OGNL表达式访问Action属性。例如:
<action name="login" class="org.shops.action.LoginAction">
<result>/${folder}/welcome.jsp/</result>
</action>
(2)当在国际化资源文件中构造的消息文本中使用了OGNL表达式时,需要将OGNL表达式用“${”和“}”括起来。例如:
message=欢迎${username}登录系统!


注:关于什么时候用“#”和什么时候不用“#”
值栈中的对象的不使用#,非值栈中的对象使用#
如果你不理解值栈的作用,简单点理解:当前action,或者处于action链中的action所拥有的属性,并且为该属性提供了getter和setter方法,那么在jsp中就不需要使用#,
除此之外需要使用#,那么从这里你就可以知道action的属性如果提供了getter和setter方法,那么这些属性值就会放置到值栈中
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值