Struts2 标签库 [Tablib]

Struts2 Taglib抽象了不同表示技术,现在Struts2主要支持三种表示技术:JSP,FreeMarker和Velocity。但部分的Tag在三种表示技术下都可以使用,但是也有部分只能在某一种情况下使用。

Tab可以分为两类:通用标签和UI标签。

通用标签
通用标签用来在页面表示的时候控制代码执行的过程,这些标签也允许从Action或者值堆栈中取得数据。例如地域,JavaBeans,URLs,和action。

控制标签控制程序执行,例如:if,else,iterator
数据标签管理数据的取得和创建,例如:bean,push,i18n

控制标签

if标签
描述
  If标签用来控制基本的条件处理流程,通常和else标签或者elseif标签连用。

参数
名字 是否必须 默认值 可否使用表达式 类型 描述
id 否   是 String 用来表示该元素,对于UI和Form标签来说直接转变为HTML id属性
test 是   是 Boolean 用来决定是否显示标签内部内容的表达式


例子
<s:if test="%{false}">
    <div>Will Not Be Executed</div>
</s:if>
<s:elseif test="%{true}">
    <div>Will Be Executed</div>
</s:elseif>
<s:else>
    <div>Will Not Be Executed</div>
</s:else>

elseIf 标签
参考if标签

else 标签
参考if标签

append标签
描述
用来做iterator标签的辅助,将不同iterator中的内容合在一个iterator中。

参数
名字 是否必须 默认值 可否使用表达式 类型 描述
id 否   是 String 用来保存结果iterator的对象在value context中的名字。


例子
Action类
public class AppendIteratorTagAction extends ActionSupport {

private List myList1;
private List myList2;
private List myList3;


public String execute() throws Exception {

     myList1 = new ArrayList();
     myList1.add("1");
     myList1.add("2");
     myList1.add("3");

     myList2 = new ArrayList();
     myList2.add("a");
     myList2.add("b");
     myList2.add("c");

     myList3 = new ArrayList();
     myList3.add("A");
     myList3.add("B");
     myList3.add("C");

     return "done";
}

public List getMyList1() { return myList1; }
public List getMyList2() { return myList2; }
public List getMyList3() { return myList3; }

标签使用
<s:append id="myAppendIterator">
     <s:param value="%{myList1}" />
     <s:param value="%{myList2}" />
     <s:param value="%{myList3}" />
</s:append>
<s:iterator value="%{#myAppendIterator}">
     <s:property />
</s:iterator>

generator 标签(JSP Tag)
描述
从val属性生成一个iterator。

参数
例子
例1:
生成一个简单的iterator,并且使用iterator标签打印出内容。
<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}">
<s:iterator>
     <s:property /><br/>
</s:iterator>
</s:generator>

例2:
生成一个iterator,使用count属性。因为count属性值为3,所以只有前三个内容(aaa,bbb,ccc)在生成的iterator中。
Generate an iterator with count attribute
<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="3">
<s:iterator>
     <s:property /><br/>
</s:iterator>
</s:generator>


例3:
生成iterator,使用了id属性,之后生成的对象放在pageContext中,可以通过指定的id来访问。
<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" count="4" separator="," id="myAtt" />
<%
Iterator i = (Iterator) pageContext.getAttribute("myAtt");
while(i.hasNext()) {
     String s = (String) i.next();
%>
     <%= s %> <br/>
<%

%>

例4:
生成iterator,使用converter属性,这里的convertor仅仅将每一个对象添加了一个"converter-"前缀。
<s:generator val="%{'aaa,bbb,ccc,ddd,eee'}" converter="%{myConverter}">
<s:iterator>
     <s:property /><br/>
</s:iterator>
</s:generator>


public class GeneratorTagAction extends ActionSupport {

  ....

  public Converter getMyConverter() {
     return new Converter() {
         public Object convert(String value) throws Exception {
             return "converter-"+value;
         }
     };
  }

  ...

}

iterator 标签
描述
迭代处理一个java.util.Connection或者java.util.Iterator对象

参数
名字 是否必须 默认值 可否使用表达式 类型 描述
id 否   是 String Id,
status 否 否 是 Boolean 如果指定,在循环的过程中会保留一个IteratorStatus类型的变量,该变量用来查询当前迭代的状态
value 否   是 String 被迭代的对象



例子
例1:
<s:iterator value="days">
  <p>day is: <s:property/></p>
</s:iterator>

例2:
<s:bean name="org.apache.struts2.example.IteratorExample" id="it">
  <s:param name="day" value="'foo'"/>
  <s:param name="day" value="'bar'"/>
</s:bean>
<p/>
<table border="0" cellspacing="0" cellpadding="1">
<tr>
  <th>Days of the week</th>
</tr>
<p/>
<s:iterator value="#it.days" status="rowstatus">
  <tr>
    <s:if test="#rowstatus.odd == true">
      <td style="background: grey"><s:property/></td>
    </s:if>
    <s:else>
      <td><s:property/></td>
    </s:else>
  </tr>
</s:iterator>
</table>

例3:
<s:iterator value="groupDao.groups" status="groupStatus">
     <tr
class="<s:if test="#groupStatus.odd == true ">odd</s:if><s:else>even</s:else>">
         <td><s:property value="name" /></td>
         <td><s:property value="description" /></td>
         <td>
             <s:iterator value="users" status="userStatus">
                 <s:property value="fullName" />
<s:if test="!#userStatus.last">,</s:if>
             </s:iterator>
         </td>
     </tr>
</s:iterator>

merge 标签(同append?)
描述
参数
例子

sort 标签(JSP-Tag)
描述
对一个可以迭代的对象进行排序操作。
 
参数
 
名字 是否必须 默认值 可否使用表达式 类型 描述
Comparator 是   是 java.util.Comparator 排序用的比较器
Source 否   是 String 排序对象


例子
例1:
<s:sort comparator="myComparator" source="myList">
     <s:iterator>
     <!-- do something with each sorted elements -->
     <s:property value="..." />
     </s:iterator>
</s:sort>

例2:
<s:sort id="mySortedList" comparator="myComparator" source="myList" />
<%
   Iterator sortedIterator = (Iterator) pageContext.getAttribute("mySortedList");
   for (Iterator i = sortedIterator; i.hasNext(); ) {
     // do something with each of the sorted elements
   }
%>

subset
描述
递归iterator的一部分

参数
名字 是否必须 默认值 可否使用表达式 类型 描述
count False   是 Integer Iterator中被递归的一部分的item的数量
Decider 否   是 org.apache.struts2.util.
SubsetIteratorFilter.Decider 用来判断iterator中的item是否包含在最终的subset内部
Source 否   是 String Iterator的对象
Start 否   是 Integer 开始位置


例子
Java类

public class MySubsetTagAction extends ActionSupport {
     public String execute() throws Exception {
        l = new ArrayList();
        l.add(new Integer(1));
        l.add(new Integer(2));
        l.add(new Integer(3));
        l.add(new Integer(4));
        l.add(new Integer(5));
        return "done";
     }


     public Integer[] getMyArray() {
        return a;
     }

     public List getMyList() {
        return l;
      }

     public Decider getMyDecider() {
     return new Decider() {
         public boolean decide(Object element) throws Exception {
             int i = ((Integer)element).intValue();
             return (((i % 2) == 0)?true:false);
         }
     };
     }
}
<!-- s: List basic -->
   <s:subset source="myList">
      <s:iterator>
         <s:property />
      </s:iterator>
   </s:subset>
<!-- B: List with count -->
   <s:subset source="myList" count="3">
      <s:iterator>
          <s:property />
      </s:iterator>
    </s:subset>
<!--  C: List with start -->
     <s:subset source="myList" count="13" start="3">
        <s:iterator>
          <s:property />
        </s:iterator>
     </s:subset>
<!--  D: List with id -->
     <s:subset id="mySubset" source="myList" count="13" start="3" />
     <%
         Iterator i = (Iterator) pageContext.getAttribute("mySubset");
         while(i.hasNext()) {
     %>
     <%=i.next() %>
     <%  } %>
<!--  D: List with Decider -->
    <s:subset source="myList" decider="myDecider">
           <s:iterator>
                <s:property />
           </s:iterator>
    </s:subset>

你可能感兴趣的:(jsp,freemarker,UI,bean,velocity)