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

来源:互联网 发布:人工智能伏羲觉醒免费 编辑:程序博客网 时间:2024/06/15 18:24
在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
原创粉丝点击