登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

学无止境

一点积累,与大家分享

 
 
 

日志

 
 

主题:struts2 Tags 堆栈分析  

2010-05-28 17:01:20|  分类: jsp技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1. property: <s:property value="username"/>


 2. property 取值为字符串: <s:property value="'username'"/>


 3.  property 设定默认值: <s:property value="admin" default="管理员"/>


 4. property 设定HTML: <s:property value="'<hr/>'" escape="true"/> 输出 <hr/>

 

 5. set 设定adminName值(默认为request 和 ActionContext): <s:set var="adminName"  value="username" />

set 从request取值: <s:property value="#request.adminName" />
set 从ActionContext取值: <s:property value="#adminName" />

set 设定范围: <s:set var="adminPassword" value="password" scope="session"/>

set 从相应范围取值: <s:property value="#session.adminPassword"/>

说明:set 在以前的版本中有name id,但是在2.1版本开始不推荐使用,用var代替.实际var表示把变量压入栈actioncontext. 官方这样说明var的:Name used to reference the value pushed into the Value Stack;

这样我们可以用#key来访问.

 

6.  bean标签

 <s:bean name="com.awf.tags.Dog"  var="mydog">
    <s:param name="name" value="'pp'"></s:param>
    <s:property value="name"/>
   </s:bean>

 

说明:注意到pp用单引号,因为这时要真正用到String,如果没有加单引号,struts2会默认用OGNL到ValueStack找值.

对于为什么可以<s:property value="name"/>(取到pp)这样取值,可以做个小实验在set标签里加入<s:debug/>,这样你可能看到整个栈数 据的出入,此时栈顶当然是mydog对象,这个标签执行完后就可以出栈了,这时action又保持在栈顶了.

此时mydog被存入到actioncontext栈中,所以要取值要用到#号了.

取值:<s:property value="#mydog.name/>

 

7. include标签

 <s:include value="/index.html"></s:include>

这里value的默认处理方式是要内容当做String,不是OGNL,如果这时要用OGNL可以用%,这就是%的实际意义了,其实上面所讲的标签 也可以使用%,OGNL对于那些默认使用OGNL的标签会忽略%号,真搞不懂为什么全部都统一,这样我们就不用记这么多了^^,下面是具体使用方法:

<s:set var="incPage" value="%{'/index.html'}" />
 <s:include value="%{#incPage}"></s:include>

 

现在回到include标签,这个标签真的不好用对中文的支持不好,可能有BUG,所以还是用jsp自带的动态包含/静态包含.

 

8. if elseif else标签

定义变量 num= <s:set var="num" value="'100'"/>   set定义的变量存在ActionContext栈中

<s:if test="#num< 0"> 小于0 </s:if>
 <s:elseif test="#num <50"> 小于50 </s:elseif>
  <s:else>大于50</s:else>

 

<s:if test="#parameters.aaa == null">null</s:if>

 

这里说到#parameters不得不提一下,我们在地址栏输入的变量会存在ActionContext栈中,如xx/sdfds.jsp?name=1

这样我们可能用OGNL这样取值#parameters.name ,注意这里取出来的是一个集合,如果你这样访问xx/sdfds.jsp?name=1&name=2,你可以发现可以取出两个值.因为这样所以在写程序时我样最好精确定位像这样#parameters.name[0],就算你能保证只能一个值,也要这样.

 

9. iterator标签,遍历集合

<s:iterator value="{1, 2, 3}" >
   <s:property/>
</s:iterator>

 

自定义变量:

<s:iterator value="{'aaa', 'bbb', 'ccc'}" var="x">
   <s:property value="#x.toUpperCase()"/> |
  </s:iterator>

 

<s:iterator value="{'aaa', 'bbb', 'ccc'}" status="status">
   <s:property/> |
   遍历过的元素总数:<s:property value="#status.count"/> |
   遍历过的元素索引:<s:property value="#status.index"/> |
   当前是偶数?:<s:property value="#status.even"/> |
   当前是奇数?:<s:property value="#status.odd"/> |
   是第一个元素吗?:<s:property value="#status.first"/> |
   是最后一个元素吗?:<s:property value="#status.last"/>
   <br />
  </s:iterator>

 

说明:偶数和其数不是下标,下标0其实是第一个当然是奇数了.

 

遍历map:

<s:iterator value="#{1:'a', 2:'b', 3:'c'}" var="x">
   <s:property value="#x.key"/> | <s:property value="#x.value"/> <br />
  </s:iterator>

 

说明:这里自定义的map要加#号,看下面例子:

<s:set var="m" value="#{1:'oo',2:'kk'}"/>
 <s:property value="#m[1]"/>

 

查了一下官方文档,没找到对map定义的说明,为什么要用到#号?这样定义有什么含义呢?

  评论这张
 
阅读(854)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018