Struts2标签库总结

<%@ taglib uri="/struts-tags" prefix="s"%>  

1.
<s:if></s:if>标签对,<s:elseif></s:elseif>标签对,<s:else></s:else>标签对  
<s:if test="#user.age < 0">没这年龄</s:if>  
<s:elseif test="#user.age < 20">太小</s:elseif>  
<s:else>行</s:else>  

2.
<s:iterator/></s:iterator>这个标签,可以遍历list,set,map,数组等。 
在使用<s:iterator/>标签的时候有三个属性值得我们关注:
1). value属性:可选的属性,value属性是指一个被迭代的集合,使用ognl表达式指定,如果为空的话默认就是ValueStack栈顶的集合.
2).id属性:可选属性, 是指集合元素的id
3).status属性:可选属性,该属性在迭代时会产生一个IteratorStatus对象,该对象可以判断当前元素的位置,包含了以下属性方法:
int getCount(); 迭代元素个数
int getIndex(); 迭代元素当前索引
boolean getFirst(); 是否为第一个
boolean getEven(); 是否为偶
boolean getLast(); 是否最后一个
bolean getOdd();   是否为奇 

 遍历 List,数组 篇  
 <s:iterator value="{'a', 'b', 'c'}">  
   <s:property />  
 </s:iterator>  
 value:放置一个集合,直接把<s:property />嵌进去,它就会遍历出来了。
  
 <s:iterator value="{'a', 'b', 'c'}" var="x">  
   <s:property value="#x.toUpperCase()" />  
 </s:iterator>  
 var:把遍历出来的对象,存放进 var 声明的 key 里,它会被放进 Stack Context,所谓遍历,一般都用这方法。  

 <s:iterator value="{'a', 'b', 'c'}" status="status">  
   <s:property value="#status.count" />  <!-- 显示遍历过对象的总数 -->  
   <s:property value="#status.index" /><!-- 遍历当前对象的索引下标 -->  
  <s:property value="#status.even" />  <!-- 当前遍历的对象是否为偶数个?注意,不是以 index 为基准,而是以 count 为基准 -->  
 <s:property value="#status.odd" /><!-- 当前遍历的对象是否为奇数个? -->  
 <s:property value="#status.first" /><!-- 当前遍历的对象是否为第一个元素?-->  
   <s:property value="#status.last" />  <!-- 当前遍历的对象是否为最后一个元素? -->  
 </s:iterator>  

 遍历 Map 篇  
 <s:iterator value="#{1:'a', 2:'b', 3:'c'}">  
   <s:property value="key" /><s:property value="value" /><br />  
</s:iterator>  
 value:这儿是一个 Map,所以用<s:property>可以提出 key 和 value信息。  
 <s:iterator value="#{1:'a', 2:'b', 3:'c'}" var="user">  
   <s:property value="#user.key" /><s:property value="#user.value" /><br />  
 </s:iterator>  
3.   
 <s:subset></s:subset>标签对,这个标签主要是从大集合里获取小集合。  
 <s:subset source="users" count="5" start="3">  
   <s:iterator>  
     <s:property />  
   </s:iterator>  
 </s:subset>  
 source:一个集合  
 count:截取的总数  
 start:从哪个下标开始截取  
4.  
 <s:debug />标签  
 <s:debug />  
 这个标签是专门用于调试用,它会出现一个 [Debug] 按钮,点击后会显示错误信息,请放在 Error 页面。  
5.  
 <s:property />标签  
 <s:property value="errors" default="默认值" />  
 这个标签可以取 Value Stack Contents 和 Stack Context 里的信息,把信息直接显示在页面上,此标签和 OGNL 配合,功能强大。  
defalt:如果 value 属性取不到值,就掉用到 default 的值。  
 <s:property value="<hr />" escape="false" />  
 escape:默认值为true,会把 value 里的字符串解析,如果设置为 false,就不解析,按照 HTML 原样输出。  
 <s:property value="'x'" />  
 有个麻烦事,就是 property 直接输出字符串,而不是把 value 值当成 OGNL,想这么做,就把想要输出的字符串加上单引号吧! '-_-'  
6.
 <s:text name="login.userName">  
   <s:param value="userName" />  
 </s:text>  
 <s:text>的 name:用于国际化,取出 properties 里对应 key 的 value 
7. 
 <s:param>的 value:用于向 properties 文件内的占位符 {0} 传值,它取的是 Action 内定义好的属性。
8.  
 <s:fielderror />标签  
 <s:fielderror fieldName="name" />  
 fieldName:对应一个继承了 ActionSupport 的类,使用 this.addFieldError("name", "Name is error!"),再在跳转后的页面使用 <s:fielderror> 标签,就可以显示 addFieldError 里的信息。  
这个标签自动生成 <li> 代码,但是有替代方案。  
 <s:property value="fieldErrors.error[0]" />  
9.   
 <s:set /> 标签,往这个标签里放东西,它会把东西放在 Stack Context(也称为ActionContext) 里,还会放在 request 里。纳闷的是,request 也是在 Stack Context 里,而且用 <s:debug /> 还看不到 request 里有这么一个键值对。  
 <s:set var="name" value="roy" />  
 var:键  
 value:值,值得注意的是这个值,会被 <s:property /> 优先当做 OGNL 来取值  
   上面这个标签的取值方式如下  
   <s:property value="#name" />  
   <s:property value="#request.name" />  
 <s:set var="name" value="roy" scope="page" />  
   <%=pageContext.getAttribute("name")  %>  
   这种写法,用 #号 就取不到了。  
10.   
 <s:bean></s:bean>标签对  
 <s:bean var="user" name="com.roy.www.dto.User" />  
   <s:param name="userName" value="'Roy'" />  <!-- name:对象内的属性;value:赋值,注意加单引号,否则当成 OGNL -->  
 </s:bean>  
 var:在 Stack Context 里的键  
 name:类的完整路径  
 取值:<s:property value="#user.userName" />  
11.   
 <s:include value="/xxx.html" />  
 这个标签基本不用,用 <%@include file="/xxx.html" %> 就OK了。  
 <s:include value="%{#includeKey}" />  
 如楼上写法,这标签会跑到 Stack Context 里去找值。

你可能感兴趣的:(html,struts)