关于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.“#”符号
“#”符号的主要作用如下:
(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
- 关于Struts2中的“#”,“%”和“$”
- 关于struts2中的action
- 关于struts2中的
- 关于struts2中的拦截器和登陆验证
- struts2中关于拦截器Interceptor中的excludeMethods和includeMethods
- 关于struts2中的拦截器和登陆验证
- 关于struts2文件上传中的uploadContentType和uploadFileName
- 关于struts2文件上传中的uploadContentType和uploadFileName
- 关于struts2文件上传中的uploadContentType和uploadFileName
- 关于struts2文件上传中的uploadContentType和uploadFileName
- 关于Struts2和ajax
- struts2 关于package中的namespace
- 关于struts2中的拦截器
- 关于Struts2中的struts.devMode
- 关于Struts2中的execute方法
- Struts2 ognl中的#、%和$
- struts2中关于拦截器Interceptor中的excludeMethods和includeMethods的理解
- structs2 中关于struts2.xml文件中的action和result标签
- 数据库总结
- Junit代码
- JUC源码分析4-原子变量-AtomicStampedReference/AtomicMarkableReference
- 快速排序代码
- 欢迎使用CSDN-markdown编辑器
- 关于Struts2中的“#”,“%”和“$”
- used by istringstream UVA 12936
- Android使用json
- Java多线程编程2--同步锁定--synchronized同步方法、脏读、锁重入
- HBase与HDFS结合使用
- 其他网站的好文章
- Android学习 迷茫了来看看
- 【matlab】主瓣、栅瓣和旁瓣(MATLAB源代码+解释)
- VC读写注册表类及用法