Struts2控制標籤

 

今天看了這個博客,感覺挺詳細的,對我也現在也很有幫助,所以轉載一下,希望對大家有些幫助

好東西就要分享一下:

Struts2的控制標籤,主要用於完成流程控制,以及對ValueStack的控制。數據標籤主要用於訪問ValueStack中的數據;控制標籤可以完成輸出流程的控制,例如循環,分支等操作,也可以完成對集合的合併,排序等操作。

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
  2. <!--  引入struts2的標籤庫 --> 
  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. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
  12. <html> 
  13.     <head> 
  14.         <base href="<%=basePath%>"> 
  15.  
  16.     </head> 
  17.  
  18.     <body> 
  19.         <h1> 
  20.             Struts2控制標籤案例 
  21.         </h1> 
  22.         <!--   
  23.       <h3>OGNL中的集合操作</h3> 
  24.       <h5>OGNL直接生成List類型的集合</h5> 
  25.        
  26.          語法格式:{e1,e2,e3,e4,.......} 
  27.          以上的語法中就直接生成了一個List類型的集合,該集合中包含的元素有:e1,e2,e3,e4, 
  28.          如果需要更多的集合元素,則元素之間可以使用英文逗號分隔. 
  29.         
  30.  
  31.        <h5>OGNL直接生成Map類型的集合</h5> 
  32.         
  33.        語法格式:# {key:value,key1:value1,key2:value2,.....} 
  34.        以上的語法中就直接生成了一個Map類型的集合,該Mapd對象中的每個key-value對象之間用英文的冒號隔開 
  35.        ,多個元素之間用逗號分隔。 
  36.         
  37.  
  38.        <h5>OGNL提供的對集合的操作符</h5> 
  39.         
  40.           OGNL提供了兩個元素符:in 和not in 
  41.             in代表的是:判斷某個元素是否在指定的集合中 
  42.             not in代表的是:某個元素是否不在指定的集合中 
  43.           除此之外:OGNL還允許通過某個規則取得集合的子集。取得子集的操作符有: 
  44.           1、? : 取出所有符合選擇邏輯的元素 
  45.           2、^ : 取出符合選擇邏輯的第一個元素 
  46.           3、$ : 取出符合選擇邏輯的最後一個元素 
  47.         
  48.  
  49.         
  50.        <h4>控制標籤</h4> 
  51.         
  52.          Struts2的控制標籤,主要用於完成流程控制,以及對ValueStack的控制。 
  53.          數據標籤主要用於訪問ValueStack中的數據;控制標籤可以完成輸出流程的控制,例如循環,分支等操作 
  54.          也可以完成對集合的合併,排序等操作。常見的控制標籤有: 
  55.          if :用於控制選擇輸出的標籤 
  56.          elseif:與if標籤結合使用,用於控制選擇輸出的標籤 
  57.          else :與if標籤結合使用,用於控制選擇輸出的標籤 
  58.          iterator:是一個迭代器,用於將集合迭代輸出 
  59.          sort:用於對集合排序 
  60.          append:用於將多個集合拼接成一個新的集合 
  61.          generator:是一個字符串解析器,用於將一個字符串解析成一個新的集合 
  62.          merge:用於將多個集合拼接成一個新的集合,但與append的拼接方式有所有不同 
  63.          subset:用於截取集合的部分元素,形成一個新的集合 
  64.           
  65.         
  66.  
  67.        --> 
  68.         <h5> 
  69.             if/elseif/else標籤 
  70.         </h5> 
  71.          
  72.             這三個標籤都是用於進行分支控制的,它們都是根據一個Boolean表達式的值,來決定是否計算、輸出 標籤體的內容 
  73.             test:爲boolean表達式 如果爲真執行標籤體 否則不執行 
  74.             <s:set name="score" value="80"></s:set> 
  75.              
  76.  
  77.  
  78.             <s:if test="%{#attr.score>60}"> 
  79.                               成績及格了..... 
  80.             </s:if> 
  81.             <s:elseif test="%{#attr.score>35}"> 
  82.                                       成績實在是太爛了.... 
  83.           </s:elseif> 
  84.  
  85.             <s:else> 
  86.                                     成績以及慘不忍睹....... 
  87.           </s:else> 
  88.  
  89.              
  90.  
  91.             上面的if/elseif/else標籤組合使用與Java語言中的if/else if/else條件控制結構相似 
  92.             <s:debug></s:debug> 
  93.          
  94.  
  95.  
  96.         <h4> 
  97.             Iterator標籤的使用 
  98.         </h4> 
  99.  
  100.          
  101.             Iterator標籤主要用於對集合進行迭代,這裏的集合包含List、Set和數組,也可以對Map類型的對象 進行迭代輸出 
  102.             可以指定3個屬性: value :這是一個可選屬性,value屬性指定的就是被迭代的集合,被迭代的集合通常 
  103.             使用OGNL表達式指定。如果沒有指定value屬性,則使用ValueStack棧頂的集合 
  104.             id:這是可選屬性,該屬性指定了集合裏的元素的ID 
  105.             status:可選屬性,該屬性指定了迭代時的IteratorStatus實例,通過該實例即可以判定當前 迭代的元素的屬性。 
  106.             例如:是否是最後一個元素,以及當前迭代元素的索引等。 IteratorStatus實例包含以下幾個方法: int 
  107.             getCount()返回當前迭代了幾個元素 int getIndex();返回當前元素的索引 boolean 
  108.             isEven();返回當前迭代的索引是否是偶數 boolean isFirst();返回當前迭代的索引是否是第一個元素 boolean 
  109.             isLast();返回當前迭代的索引是否是最後一個元素 boolean isOdd();返回當前迭代的索引是否是奇數 
  110.  
  111.             var:當前迭代的元素 begin:開始的位置 end:結束的位置 step:跨度 
  112.  
  113.             <table border="1px" cellpadding="0" cellspacing="0"> 
  114.  
  115.                 <caption> 
  116.                     圖書名稱信息 
  117.                 </caption> 
  118.                 <tr> 
  119.                     <th> 
  120.                         圖書的名稱 
  121.                     </th> 
  122.                 </tr> 
  123.  
  124.                 <s:iterator var="name" 
  125.                     value="{'HTML入門','Java基礎','CSS入門','JavaWeb實戰'}" status="st"> 
  126.  
  127.                     <s:if test="#st.odd"> 
  128.                         <tr style="background-color: red;"> 
  129.                             <td> 
  130.                                 <s:property value="name" /> 
  131.                             </td> 
  132.                         </tr> 
  133.                     </s:if> 
  134.                     <s:else> 
  135.                         <tr style="background-color: green;"> 
  136.                             <td> 
  137.                                 <s:property value="name" /> 
  138.                             </td> 
  139.                         </tr> 
  140.                     </s:else> 
  141.  
  142.  
  143.                 </s:iterator> 
  144.  
  145.             </table> 
  146.  
  147.  
  148.              
  149.  
  150.             作業實現表格各行換色 
  151.              
  152.  
  153.  
  154.              
  155.  
  156.  
  157.             <table border="1px" cellpadding="0" cellspacing="0"> 
  158.  
  159.                 <caption> 
  160.                     圖書信息 
  161.                 </caption> 
  162.                 <tr> 
  163.                     <th> 
  164.                         圖書的名稱 
  165.                     </th> 
  166.                     <th> 
  167.                         圖書的作者 
  168.                     </th> 
  169.                 </tr> 
  170.  
  171.                 <s:iterator var="name" 
  172.                     value="#{'HTML入門':'redarmy','Java基礎':'lihui','CSS入門':'baobao','JavaWeb實戰':'yq'}"> 
  173.                     <tr> 
  174.                         <td> 
  175.                             <s:property value="key" /> 
  176.                         </td> 
  177.                         <td> 
  178.                             <s:property value="value" /> 
  179.                         </td> 
  180.                     </tr> 
  181.                 </s:iterator> 
  182.  
  183.             </table> 
  184.          
  185.  
  186.  
  187.         <h5> 
  188.             append標籤的使用 
  189.         </h5> 
  190.  
  191.          
  192.             append標籤用於將多個對象拼接起來,形成一個新的集合 
  193.  
  194.             <h5> 
  195.                 List集合拼接 
  196.             </h5> 
  197.             <s:append var="newList"> 
  198.                 <s:param value="{'HTML入門','Java基礎','CSS入門','JavaWeb實戰'}"></s:param> 
  199.                 <s:param value="{'HIbernate教程','Struts2教程'}"></s:param> 
  200.             </s:append> 
  201.  
  202.             <table border="1px" cellpadding="1px" cellspacing="1px"> 
  203.                 <caption> 
  204.                     圖書信息2 
  205.                 </caption> 
  206.                 <tr> 
  207.                     <th> 
  208.                         圖書名稱 
  209.                     </th> 
  210.                 </tr> 
  211.  
  212.                 <s:iterator value="#newList"> 
  213.  
  214.                     <tr> 
  215.                         <td> 
  216.                             <s:property /> 
  217.                         </td> 
  218.  
  219.                     </tr> 
  220.                 </s:iterator> 
  221.  
  222.             </table> 
  223.  
  224.              
  225.  
  226.             <h5> 
  227.                 Map集合的拼接 
  228.             </h5> 
  229.  
  230.             <s:append var="newMap"> 
  231.                 <s:param 
  232.                     value="#{'HTML入門':'redarmy','Java基礎':'baobao','CSS入門':'李慧','JavaWeb實戰':'yq'}"></s:param> 
  233.                 <s:param value="#{'HIbernate教程':'李剛','Struts2教程':'redarmy'}"></s:param> 
  234.             </s:append> 
  235.  
  236.             <table border="1px" cellpadding="1px" cellspacing="1px"> 
  237.                 <caption> 
  238.                     圖書信息2 
  239.                 </caption> 
  240.                 <tr> 
  241.                     <th> 
  242.                         圖書名稱 
  243.                     </th> 
  244.                     <th> 
  245.                         圖書作者 
  246.                     </th> 
  247.                 </tr> 
  248.  
  249.                 <s:iterator value="#newMap"> 
  250.  
  251.                     <tr> 
  252.                         <td> 
  253.                             <s:property value="key" /> 
  254.                         </td> 
  255.                         <td> 
  256.                             <s:property value="value" /> 
  257.                         </td> 
  258.  
  259.                     </tr> 
  260.                 </s:iterator> 
  261.  
  262.             </table> 
  263.  
  264.  
  265.  
  266.              
  267.  
  268.  
  269.             <h5> 
  270.                 map List集合的拼接 
  271.             </h5> 
  272.  
  273.  
  274.             <s:append var="newLM"> 
  275.                 <s:param 
  276.                     value="#{'HTML入門':'redarmy','Java基礎':'baobao','CSS入門':'李慧','JavaWeb實戰':'yq'}"></s:param> 
  277.                 <!-- List方式要寫成Map的形式 但沒有value值 --> 
  278.                 <s:param value="#{'HIbernate教程','Struts2教程'}"></s:param> 
  279.             </s:append> 
  280.  
  281.             <table border="1px" cellpadding="1px" cellspacing="1px"> 
  282.                 <caption> 
  283.                     圖書信息2 
  284.                 </caption> 
  285.                 <tr> 
  286.                     <th> 
  287.                         圖書名稱 
  288.                     </th> 
  289.                     <th> 
  290.                         圖書作者 
  291.                     </th> 
  292.                 </tr> 
  293.  
  294.                 <s:iterator value="#newLM"> 
  295.  
  296.                     <tr> 
  297.                         <td> 
  298.                             <s:property value="key" /> 
  299.                         </td> 
  300.                         <td> 
  301.                             <s:property value="value" /> 
  302.                         </td> 
  303.  
  304.                     </tr> 
  305.                 </s:iterator> 
  306.  
  307.             </table> 
  308.              
  309.  
  310.  
  311.  
  312.             <h5> 
  313.                 merge標籤 
  314.             </h5> 
  315.              
  316.                 merge標籤的用法看起來非常像append標籤,但是有區別: 
  317.                 <s:append var="ast"> 
  318.                     <s:param value="{'html','css','ajax'}"></s:param> 
  319.                     <s:param value="{'java','jsp','servlet'}"></s:param> 
  320.                     <s:param value="{'struts2','mysql','hibernate'}"></s:param> 
  321.                 </s:append> 
  322.  
  323.  
  324.                 <s:merge var="mst"> 
  325.                     <s:param value="{'html','css','ajax'}"></s:param> 
  326.                     <s:param value="{'java','jsp','servlet'}"></s:param> 
  327.                     <s:param value="{'struts2','mysql','hibernate'}"></s:param> 
  328.                 </s:merge> 
  329.                 <h3> 
  330.                     append標籤拼接 
  331.                 </h3> 
  332.                 <s:iterator value="#ast"> 
  333.                     <s:property /> 
  334.                      
  335.  
  336.                 </s:iterator> 
  337.                 <h4> 
  338.                     merge標籤拼接 
  339.                 </h4> 
  340.                 <s:iterator value="#mst"> 
  341.                     <s:property /> 
  342.                      
  343.  
  344.                 </s:iterator> 
  345.  
  346.                  
  347.  
  348.                 以上看出:append標籤的拼接方式是: 第1個集合中的第一個元素 第1個集合中的第二個元素 第1個集合中的第三個元素 
  349.                 第2個集合中的第一個元素 第2個集合中的第二個元素 第2個集合中的第三個元素 第3個集合中的第一個元素 第3個集合中的第二個元素 
  350.                 第3個集合中的第三個元素 merge標籤的拼接方式是: 第1個集合中的第一個元素 第2個集合中的第一個元素 第3個集合中的第一個元素 
  351.                 第1個集合中的第二個元素 第2個集合中的第二個元素 第3個集合中的第二個元素 第1個集合中的第三個元素 第2個集合中的第三個元素 
  352.                 第3個集合中的第三個元素 
  353.  
  354.              
  355.  
  356.          
  357.  
  358.  
  359.         <h5> 
  360.             generator標籤 
  361.         </h5> 
  362.          
  363.             將制定的字符串按指定的分隔符分隔成多個字串. count:可選屬性,指定生成集合中元素的總數 
  364.             separator:必填屬性:指定解析字符串的分隔符 val:必填屬性:指定解析字符串 
  365.             converter:可選屬性,轉換器,該轉換器負責將集合中的每個字符串轉換成對象 
  366.             id:可選屬性,如果指明該屬性則生成的集合放入到pageContext屬性中 註釋:generator分隔的字符串 
  367.             ,如果在標籤體內,整個臨時生成的集合將位於ValueStack的頂端 .但標籤結束時,被移出ValueStack。 
  368.              
  369.  
  370.              
  371.  
  372.             <table border="1px"> 
  373.                 <tr> 
  374.                     <th> 
  375.                         名稱 
  376.                     </th> 
  377.                 </tr> 
  378.                 <s:generator val="'this,is,a,doctor'" separator=","> 
  379.                     <!-- 由於在generator標籤體內,該集合位於ValueStack的棧頂 ,故此處迭代的就是臨時生成的集合 --> 
  380.                     <s:iterator var="bname"> 
  381.                         <tr> 
  382.                             <td> 
  383.                                 <s:property value="bname" /> 
  384.                             </td> 
  385.                         </tr> 
  386.                     </s:iterator> 
  387.                      
  388.  
  389.  
  390.  
  391.                 </s:generator> 
  392.             </table> 
  393.             <!-- 通過id標識此解析的集合存入到pageContext中 --> 
  394.             <s:generator separator="," val="'this,is,a,man'" id="bks"></s:generator> 
  395.              
  396.  
  397.             <h1> 
  398.                 標籤體外打印解析的字符串集合 
  399.             </h1> 
  400.  
  401.             <s:iterator value="#attr.bks"> 
  402.                 <s:property /> 
  403.                  
  404.  
  405.             </s:iterator> 
  406.          
  407.  
  408.  
  409.  
  410.         <h1> 
  411.             subset標籤 
  412.         </h1> 
  413.          
  414.             subset標籤用於取得集合的子集,該標籤的底層通過:org.apache.struts2.uitl.SubsetIteratorFilte類提供實現 
  415.             屬性: count:可選屬性:代表子集中的元素個數,如果沒有指定代表源集合的全部元素 
  416.             source:可選屬性:指定源集合,如果沒有指定代表是valueStack的棧頂集合 start:可選屬性:從第幾元素開始截取 
  417.             decider:可選屬性:指定由開發者自己決定是否選中該元素。 注意事項: 
  418.             在subset標籤內時,subset標籤生成的子集位於valueStack的棧頂,如果標籤結束,該標籤生成的子集 
  419.             將被移出valueStack棧。 
  420.  
  421.  
  422.             <s:subset source="{'java','test','mybook','txs','lihui'}" start="1" 
  423.                 count="3"> 
  424.                 <!-- 由於在subset標籤體內,該子集位於ValueStack的棧頂 ,故此處迭代的就是臨時生成的集合 --> 
  425.                 <s:iterator> 
  426.                     <s:property /> 
  427.                      
  428.  
  429.                 </s:iterator> 
  430.                 <!-- 注意1代表的是第二元素 --> 
  431.             </s:subset> 
  432.  
  433.              
  434.  
  435.              
  436.  
  437.              
  438.  
  439.             <h5> 
  440.                 實現自己的Decider實例 
  441.             </h5> 
  442.             <s:bean name="edu.dc.MyDecider" id="mydecider"></s:bean> 
  443.             <h6> 
  444.                 通過自己定義的Decider實例來截取目標集合,生成子集 
  445.             </h6> 
  446.             <s:subset 
  447.                 source="{'01Java入門','JSP入門','Servlet入門','02Java基礎案例','基於Java的經典案例'}" 
  448.                 decider="#mydecider"> 
  449.                 <s:iterator> 
  450.                     <s:property /> 
  451.                      
  452.  
  453.                 </s:iterator> 
  454.             </s:subset> 
  455.  
  456.             <h1> 
  457.                 sort標籤 
  458.             </h1> 
  459.              
  460.                 用於對指定集合元素進行排序,進行排序時,必須提供自己的排序規則,即實現自己的 
  461.                 Comparator,自己的Comparator需要實現java.util.Comparator接口 屬性: 
  462.                 comparator:必填屬性,指定進行排序的comparator的實例 
  463.                 source:可選屬性:指定排序的集合,如果沒有指定代表是valueStack的棧頂集合 備註: 
  464.                 在sort標籤內時,sort標籤生成的子集位於valueStack的棧頂,如果標籤結束,該標籤生成的子集 
  465.                 將被移出valueStack棧。 
  466.  
  467.                 <s:bean var="mycomparator" name="edu.dc.MyComparator"></s:bean> 
  468.                 <s:sort comparator="#mycomparator" 
  469.                     source="{'JavaEE','css','JavaHTMl'}"> 
  470.                     <s:iterator> 
  471.                         <s:property /> 
  472.                          
  473.  
  474.                     </s:iterator> 
  475.  
  476.                 </s:sort> 
  477.              
  478.  
  479.  
  480.  
  481.          
  482.  
  483.     </body> 
  484. </html> 
  485.  
  486. /**以上用到的Subset標籤用到的bean類如下*/ 
  487. package edu.dc; 
  488.  
  489. import org.apache.struts2.util.*; 
  490.  
  491. /** 自定定義Decider類,實現SubsetIteratorFilter.Decider */ 
  492. public class MyDecider implements SubsetIteratorFilter.Decider { 
  493.  
  494.     /** 實現Decider接口中的decide方法,該方法決定集合中的元素是否被選入到子集中 */ 
  495.     public boolean decide(Object arg0) throws Exception { 
  496.         System.out.println("----------------"); 
  497.         /** 把arg0造型爲字符串 */ 
  498.         String str = (String) arg0; 
  499.         /** 如果集合中包含java 那麼即可被選入到子集中 */ 
  500.         System.out.println("----------------" + (str.indexOf("Java") > 0)); 
  501.         return (str.indexOf("Java") > 0); 
  502.     } 
  503.  
  504.  
  505. /**以下是sort標籤實例中用到的備案實例*/ 
  506.  
  507. package edu.dc; 
  508.  
  509. import java.util.Comparator; 
  510.  
  511. /** 需要實現Comparator接口 */ 
  512. public class MyComparator implements Comparator<String> { 
  513.     /** 
  514.      * 如果該方法返回一個大於0的整數,則第一個元素大於第二元素,如果爲0則相同 如果小於零,則第一個元素小於第二元素 
  515.      */ 
  516.     public int compare(String o1, String o2) { 
  517.         /** 根據字符串的長度決定字符串的大小 */ 
  518.         return (o1.length() - o2.length()); 
  519.     } 
  520.  

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章