今天看了这个博客,感觉挺详细的,对我也现在也很有帮助,所以转载一下,希望对大家有些帮助

好东西就要分享一下:

Struts2的控制标签,主要用于完成流程控制,以及对ValueStack的控制。数据标签主要用于访问ValueStack中的数据;控制标签可以完成输出流程的控制,例如循环,分支等操作,也可以完成对集合的合并,排序等操作。

    
    
    
    
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
  2.  
  3. <%@ taglib uri="/struts-tags" prefix="s"%> 
  4. <
  5.     String path = request.getContextPath(); 
  6.     String basePath = request.getScheme() + "://" 
  7.             + request.getServerName() + ":" + request.getServerPort() 
  8.             + path + "/"; 
  9. %> 
  10.  
  11. > 
  12. <html> 
  13.     <head> 
  14.         <base href="<%=basePath%>"> 
  15.  
  16.     head> 
  17.  
  18.     <body> 
  19.         <h1> 
  20.             Struts2控制标签案例 
  21.         h1> 
  22.          
  23.                 <s:param value="#{'HIbernate教程','Struts2教程'}">s:param> 
  24.             s:append> 
  25.  
  26.             <table border="1px" cellpadding="1px" cellspacing="1px"> 
  27.                 <caption> 
  28.                     图书信息2 
  29.                 caption> 
  30.                 <tr> 
  31.                     <th> 
  32.                         图书名称 
  33.                     th> 
  34.                     <th> 
  35.                         图书作者 
  36.                     th> 
  37.                 tr> 
  38.  
  39.                 <s:iterator value="#newLM"> 
  40.  
  41.                     <tr> 
  42.                         <td> 
  43.                             <s:property value="key" /> 
  44.                         td> 
  45.                         <td> 
  46.                             <s:property value="value" /> 
  47.                         td> 
  48.  
  49.                     tr> 
  50.                 s:iterator> 
  51.  
  52.             table> 
  53.              
  54.  
  55.  
  56.  
  57.             <h5> 
  58.                 merge标签 
  59.             h5> 
  60.              
  61.                 merge标签的用法看起来非常像append标签,但是有区别: 
  62.                 <s:append var="ast"> 
  63.                     <s:param value="{'html','css','ajax'}">s:param> 
  64.                     <s:param value="{'java','jsp','servlet'}">s:param> 
  65.                     <s:param value="{'struts2','mysql','hibernate'}">s:param> 
  66.                 s:append> 
  67.  
  68.  
  69.                 <s:merge var="mst"> 
  70.                     <s:param value="{'html','css','ajax'}">s:param> 
  71.                     <s:param value="{'java','jsp','servlet'}">s:param> 
  72.                     <s:param value="{'struts2','mysql','hibernate'}">s:param> 
  73.                 s:merge> 
  74.                 <h3> 
  75.                     append标签拼接 
  76.                 h3> 
  77.                 <s:iterator value="#ast"> 
  78.                     <s:property /> 
  79.                      
  80.  
  81.                 s:iterator> 
  82.                 <h4> 
  83.                     merge标签拼接 
  84.                 h4> 
  85.                 <s:iterator value="#mst"> 
  86.                     <s:property /> 
  87.                      
  88.  
  89.                 s:iterator> 
  90.  
  91.                  
  92.  
  93.                 以上看出:append标签的拼接方式是: 第1个集合中的第一个元素 第1个集合中的第二个元素 第1个集合中的第三个元素 
  94.                 第2个集合中的第一个元素 第2个集合中的第二个元素 第2个集合中的第三个元素 第3个集合中的第一个元素 第3个集合中的第二个元素 
  95.                 第3个集合中的第三个元素 merge标签的拼接方式是: 第1个集合中的第一个元素 第2个集合中的第一个元素 第3个集合中的第一个元素 
  96.                 第1个集合中的第二个元素 第2个集合中的第二个元素 第3个集合中的第二个元素 第1个集合中的第三个元素 第2个集合中的第三个元素 
  97.                 第3个集合中的第三个元素 
  98.  
  99.              
  100.  
  101.          
  102.  
  103.  
  104.         <h5> 
  105.             generator标签 
  106.         h5> 
  107.          
  108.             将制定的字符串按指定的分隔符分隔成多个字串. count:可选属性,指定生成集合中元素的总数 
  109.             separator:必填属性:指定解析字符串的分隔符 val:必填属性:指定解析字符串 
  110.             converter:可选属性,转换器,该转换器负责将集合中的每个字符串转换成对象 
  111.             id:可选属性,如果指明该属性则生成的集合放入到pageContext属性中 注释:generator分隔的字符串 
  112.             ,如果在标签体内,整个临时生成的集合将位于ValueStack的顶端 .但标签结束时,被移出ValueStack。 
  113.              
  114.  
  115.              
  116.  
  117.             <table border="1px"> 
  118.                 <tr> 
  119.                     <th> 
  120.                         名称 
  121.                     th> 
  122.                 tr> 
  123.                 <s:generator val="'this,is,a,doctor'" separator=","> 
  124.                      
  125.                     <s:iterator var="bname"> 
  126.                         <tr> 
  127.                             <td> 
  128.                                 <s:property value="bname" /> 
  129.                             td> 
  130.                         tr> 
  131.                     s:iterator> 
  132.                      
  133.  
  134.  
  135.  
  136.                 s:generator> 
  137.             table> 
  138.              
  139.             <s:generator separator="," val="'this,is,a,man'" id="bks">s:generator> 
  140.              
  141.  
  142.             <h1> 
  143.                 标签体外打印解析的字符串集合 
  144.             h1> 
  145.  
  146.             <s:iterator value="#attr.bks"> 
  147.                 <s:property /> 
  148.                  
  149.  
  150.             s:iterator> 
  151.          
  152.  
  153.  
  154.  
  155.         <h1> 
  156.             subset标签 
  157.         h1> 
  158.          
  159.             subset标签用于取得集合的子集,该标签的底层通过:org.apache.struts2.uitl.SubsetIteratorFilte类提供实现 
  160.             属性: count:可选属性:代表子集中的元素个数,如果没有指定代表源集合的全部元素 
  161.             source:可选属性:指定源集合,如果没有指定代表是valueStack的栈顶集合 start:可选属性:从第几元素开始截取 
  162.             decider:可选属性:指定由开发者自己决定是否选中该元素。 注意事项: 
  163.             在subset标签内时,subset标签生成的子集位于valueStack的栈顶,如果标签结束,该标签生成的子集 
  164.             将被移出valueStack栈。 
  165.  
  166.  
  167.             <s:subset source="{'java','test','mybook','txs','lihui'}" start="1" 
  168.                 count="3"> 
  169.                  
  170.                 <s:iterator> 
  171.                     <s:property /> 
  172.                      
  173.  
  174.                 s:iterator> 
  175.                  
  176.             s:subset> 
  177.  
  178.              
  179.  
  180.              
  181.  
  182.              
  183.  
  184.             <h5> 
  185.                 实现自己的Decider实例 
  186.             h5> 
  187.             <s:bean name="edu.dc.MyDecider" id="mydecider">s:bean> 
  188.             <h6> 
  189.                 通过自己定义的Decider实例来截取目标集合,生成子集 
  190.             h6> 
  191.             <s:subset 
  192.                 source="{'01Java入门','JSP入门','Servlet入门','02Java基础案例','基于Java的经典案例'}" 
  193.                 decider="#mydecider"> 
  194.                 <s:iterator> 
  195.                     <s:property /> 
  196.                      
  197.  
  198.                 s:iterator> 
  199.             s:subset> 
  200.  
  201.             <h1> 
  202.                 sort标签 
  203.             h1> 
  204.              
  205.                 用于对指定集合元素进行排序,进行排序时,必须提供自己的排序规则,即实现自己的 
  206.                 Comparator,自己的Comparator需要实现java.util.Comparator接口 属性: 
  207.                 comparator:必填属性,指定进行排序的comparator的实例 
  208.                 source:可选属性:指定排序的集合,如果没有指定代表是valueStack的栈顶集合 备注: 
  209.                 在sort标签内时,sort标签生成的子集位于valueStack的栈顶,如果标签结束,该标签生成的子集 
  210.                 将被移出valueStack栈。 
  211.  
  212.                 <s:bean var="mycomparator" name="edu.dc.MyComparator">s:bean> 
  213.                 <s:sort comparator="#mycomparator" 
  214.                     source="{'JavaEE','css','JavaHTMl'}"> 
  215.                     <s:iterator> 
  216.                         <s:property /> 
  217.                          
  218.  
  219.                     s:iterator> 
  220.  
  221.                 s:sort> 
  222.              
  223.  
  224.  
  225.  
  226.          
  227.  
  228.     body> 
  229. html> 
  230.  
  231. /**以上用到的Subset标签用到的bean类如下*/ 
  232. package edu.dc; 
  233.  
  234. import org.apache.struts2.util.*; 
  235.  
  236. /** 自定定义Decider类,实现SubsetIteratorFilter.Decider */ 
  237. public class MyDecider implements SubsetIteratorFilter.Decider { 
  238.  
  239.     /** 实现Decider接口中的decide方法,该方法决定集合中的元素是否被选入到子集中 */ 
  240.     public boolean decide(Object arg0) throws Exception { 
  241.         System.out.println("----------------"); 
  242.         /** 把arg0造型为字符串 */ 
  243.         String str = (String) arg0; 
  244.         /** 如果集合中包含java 那么即可被选入到子集中 */ 
  245.         System.out.println("----------------" + (str.indexOf("Java") > 0)); 
  246.         return (str.indexOf("Java") > 0); 
  247.     } 
  248.  
  249.  
  250. /**以下是sort标签实例中用到的备案实例*/ 
  251.  
  252. package edu.dc; 
  253.  
  254. import java.util.Comparator; 
  255.  
  256. /** 需要实现Comparator接口 */ 
  257. public class MyComparator implements Comparator<String> { 
  258.     /** 
  259.      * 如果该方法返回一个大于0的整数,则第一个元素大于第二元素,如果为0则相同 如果小于零,则第一个元素小于第二元素 
  260.      */ 
  261.     public int compare(String o1, String o2) { 
  262.         /** 根据字符串的长度决定字符串的大小 */ 
  263.         return (o1.length() - o2.length()); 
  264.     } 
  265.  

 原文出自:http://redarmychen.iteye.com/blog/841906