国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Struts2中實現(xiàn)自定義分頁標簽

Struts2中實現(xiàn)自定義分頁標簽

    Struts2中實現(xiàn)自定義標簽很簡單,主要分為3步:

    1.創(chuàng)建taglib文件(.tld),編寫標簽聲明。

    2.編寫自定義標簽類。

    3.在頁面中使用標簽。

    下面以一個自定義的分頁標簽為例,進行說明。

    其實,開發(fā)自定義標簽并不需要Struts2的支持,一般情況下,只需要繼承javax.servlet.jsp.tagext.BodyTagSupport類,重寫doStartTag,doEndTag等方法即可。這里在實現(xiàn)自定義標簽時,繼承的2個類分別是org.apache.struts2.views.jsp.ComponentTagSupport和org.apache.struts2.components.Component,ComponentTagSupport實際上是對BodyTagSupport的一次封裝,看一下ComponentTagSupport類的繼承關系就明了了:

Java代碼
  1. java.lang.Object   
  2.   extended by javax.servlet.jsp.tagext.TagSupport   
  3.       extended by javax.servlet.jsp.tagext.BodyTagSupport   
  4.           extended by org.apache.struts2.views.jsp.StrutsBodyTagSupport   
  5.               extended by org.apache.struts2.views.jsp.ComponentTagSupport  

 繼承ComponentTagSupport類是為了獲得標簽中的屬性值,并包裝成Component對象。繼承Component類是為了從Struts2中的ValueStack中獲得相對應的值。

1.聲明自定義標簽。

首先,需要創(chuàng)建一個tld文件,這是一個標準的XML文件,這個文件中就包含有對自定義標簽的聲明,聲明指出了標簽的名字,實現(xiàn)標簽的類,標簽的屬性等信息。當在頁面中使用該標簽時,web服務器就會從這個文件中找出相對應的標簽類,并實例化后執(zhí)行。這個文件其實與struts.xml文件的作用相類似。

tangs.tld

Xml代碼
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">  
  3. <taglib>  
  4.     <tlib-version>2.2.3</tlib-version>  
  5.     <jsp-version>1.2</jsp-version>  
  6.     <short-name>tangs</short-name>  
  7.     <uri>/tangs</uri>  
  8.     <display-name>"Tangs Tags"</display-name>  
  9.        
  10.         <tag>  
  11.             <name>pages</name>  
  12.             <tag-class>com.tangs.tag.PageTag</tag-class>   //標簽類   
  13.             <body-content>empty</body-content>  
  14.             <attribute>   //標簽中的屬性   
  15.                 <name>cpage</name>  //屬性名   
  16.                 <required>true</required>  //是否必須   
  17.                 <rtexprvalue>true</rtexprvalue>  //表示該自定義標簽的某屬性的值可以直接指定或者通過動態(tài)計算指定   
  18.             </attribute>  
  19.             <attribute>  
  20.                 <name>total</name>  
  21.                 <required>true</required>  
  22.                 <rtexprvalue>true</rtexprvalue>  
  23.             </attribute>  
  24.             <attribute>  
  25.                 <name>url</name>  
  26.                 <required>true</required>  
  27.                 <rtexprvalue>true</rtexprvalue>  
  28.             </attribute>  
  29.         </tag>  
  30. </taglib>  

 2.編寫標簽類

PageTag.java

Java代碼
  1. package com.tangs.tag;   
  2.   
  3. import com.opensymphony.xwork2.util.ValueStack;   
  4. import javax.servlet.http.HttpServletRequest;   
  5. import javax.servlet.http.HttpServletResponse;   
  6. import org.apache.struts2.components.Component;   
  7. import org.apache.struts2.views.jsp.ComponentTagSupport;   
  8.   
  9. /**  
  10.  * 分頁標簽  
  11.  * @author tangs  
  12.  */  
  13. public class PageTag extends ComponentTagSupport {   
  14.     private String cpage;  //當前頁   
  15.     private String total;  //總頁數(shù)   
  16.     private String url;  //請求地址   
  17.   
  18.     public void setCpage(String cpage) {   
  19.         this.cpage = cpage;   
  20.     }   
  21.   
  22.     public void setTotal(String total) {   
  23.         this.total = total;   
  24.     }   
  25.   
  26.     public void setUrl(String url) {   
  27.         this.url = url;   
  28.     }   
  29.   
  30.     @Override  
  31.     public Component getBean(ValueStack arg0, HttpServletRequest arg1, HttpServletResponse arg2) {   
  32.         return new Pages(arg0); //返回Pages Component,分頁的邏輯處理都在這個Component中   
  33.     }   
  34.   
  35.     //獲得參數(shù)   
  36.     protected void populateParams() {   
  37.         super.populateParams();   
  38.            
  39.         Pages pages = (Pages)component;   
  40.         pages.setCpage(cpage);   
  41.         pages.setTotal(total);   
  42.         pages.setUrl(url);   
  43.     }   
  44. }  

    Pages.java

Java代碼
  1. package com.tangs.tag;   
  2.   
  3. import com.opensymphony.xwork2.util.ValueStack;   
  4. import java.io.IOException;   
  5. import java.io.Writer;   
  6. import java.util.logging.Level;   
  7. import java.util.logging.Logger;   
  8. import org.apache.struts2.components.Component;   
  9.   
  10. /**  
  11.  * 分頁邏輯Bean  
  12.  * @author tangs  
  13.  */  
  14. public class Pages extends Component {   
  15.     private String cpage;   
  16.     private String total;   
  17.     private String url;   
  18.   
  19.     public String getCpage() {   
  20.         return cpage;   
  21.     }   
  22.   
  23.     public void setCpage(String cpage) {   
  24.         this.cpage = cpage;   
  25.     }   
  26.   
  27.     public String getTotal() {   
  28.         return total;   
  29.     }   
  30.   
  31.     public void setTotal(String total) {   
  32.         this.total = total;   
  33.     }   
  34.   
  35.     public String getUrl() {   
  36.         return url;   
  37.     }   
  38.   
  39.     public void setUrl(String url) {   
  40.         this.url = url;   
  41.     }   
  42.        
  43.        
  44.     public Pages(ValueStack arg0) {   
  45.         super(arg0);   
  46.     }   
  47.   
  48.     @Override  
  49.     public boolean start(Writer writer) {   
  50.         boolean result = super.start(writer);   
  51.         try {   
  52.             StringBuilder str = new StringBuilder();   
  53.             boolean isValid = true;   
  54.                
  55.             //從ValueStack中取出數(shù)值   
  56.             if (isValid) {   
  57.                 if (total.startsWith("%{") && total.endsWith("}")) {   
  58.                     total = total.substring(2, total.length() -1);   
  59.                     total = (String)this.getStack().findValue(total);   
  60.                     isValid = total == null ? false : true;   
  61.                 } else {   
  62.                     isValid = false;   
  63.                 }   
  64.             }   
  65.             if (isValid) {   
  66.                 if (cpage.startsWith("%{") && cpage.endsWith("}")) {   
  67.                     cpage = cpage.substring(2, cpage.length() - 1);   
  68.                     cpage = (String)this.getStack().findValue(cpage);   
  69.                     isValid = cpage == null ? false : true;   
  70.                 } else {   
  71.                     isValid = false;   
  72.                 }   
  73.             }   
  74.             if (isValid) {   
  75.                 if (url.startsWith("%{") && url.endsWith("}")) {   
  76.                     url = url.substring(2, url.length() - 1);   
  77.                     url = (String)this.getStack().findValue(url);   
  78.                     isValid = url == null ? false : true;   
  79.                 } else {   
  80.                     isValid = false;   
  81.                 }   
  82.             }   
  83.   
  84.             if (isValid) {   
  85.                 Integer cpageInt = Integer.valueOf(cpage);   
  86.                 //當前頁與總頁數(shù)相等   
  87.                 if (cpage.equals(total)) {   
  88.                     //如果total = 1,則無需分頁,顯示“[第1頁] [共1頁]”   
  89.                     if ("1".equals(total)) {   
  90.                         str.append("[第 " + cpage + " 頁]");   
  91.                         str.append(" [共 " + total + " 頁]");   
  92.                     } else {   
  93.                         //到達最后一頁,顯示“[首頁] [上一頁] [末頁]”   
  94.                         str.append("<a href='");   
  95.                         str.append(url);   
  96.                         str.append("?cpage=1&total="+total+"&url="+url);   
  97.                         str.append("'>[首頁]</a> <a href='");   
  98.                         str.append(url);   
  99.                         str.append("?cpage=" + (cpageInt - 1) + "&total=" + total+"&url="+url);   
  100.                         str.append("'>[上一頁]</a> <a href='");   
  101.                         str.append(url);   
  102.                         str.append("?cpage=" + total + "&total=" + total+"&url="+url);   
  103.                         str.append("'>[末頁]</a>");   
  104.                     }   
  105.                 } else {   
  106.                     //當前頁與總頁數(shù)不相同   
  107.                     if ("1".equals(cpage)) {   
  108.                         //第一頁,顯示“[首頁] [下一頁] [末頁]”   
  109.                         str.append("<a href='");   
  110.                         str.append(url);   
  111.                         str.append("?cpage=1&total="+total+"&url="+url);   
  112.                         str.append("'>[首頁]</a> <a href='");   
  113.                         str.append(url);   
  114.                         str.append("?cpage=" + (cpageInt + 1) + "&total=" + total+"&url="+url);   
  115.                         str.append("'>[下一頁]</a> <a href='");   
  116.                         str.append(url);   
  117.                         str.append("?cpage=" + total + "&total=" + total+"&url="+url);   
  118.                         str.append("'>[末頁]</a>");   
  119.                     } else {   
  120.                         //不是第一頁,顯示“[首頁] [上一頁] [下一頁] [末頁]”   
  121.                         str.append("<a href='");   
  122.                         str.append(url);   
  123.                         str.append("?cpage=1&total="+total+"&url="+url);   
  124.                         str.append("'>[首頁]</a> <a href='");   
  125.                         str.append(url);   
  126.                         str.append("?cpage=" + (cpageInt - 1) + "&total=" + total+"&url="+url);   
  127.                         str.append("'>[上一頁]</a> <a href='");   
  128.                         str.append(url);   
  129.                         str.append("?cpage=" + (cpageInt + 1) + "&total=" + total+"&url="+url);   
  130.                         str.append("'>[下一頁]</a> <a href='");   
  131.                         str.append(url);   
  132.                         str.append("?cpage=" + total + "&total=" + total+"&url="+url);   
  133.                         str.append("'>[末頁]</a>");   
  134.                     }   
  135.                 }   
  136.             }   
  137.               
  138.             writer.write(str.toString());   
  139.                
  140.         } catch (IOException ex) {   
  141.             Logger.getLogger(Pages.class.getName()).log(Level.SEVERE, null, ex);   
  142.         }   
  143.         return result;   
  144.     }   
  145. }  

3.服務端

服務端主要是獲得請求然后轉(zhuǎn)向顯示的頁面

DisplayAction.java

Java代碼
  1. /*  
  2.  * To change this template, choose Tools | Templates  
  3.  * and open the template in the editor.  
  4.  */  
  5.   
  6. package com.tangs.action;   
  7.   
  8. import com.opensymphony.xwork2.ActionSupport;   
  9.   
  10. /**  
  11.  *  
  12.  * @author tangs  
  13.  */  
  14. public class DisplayAction extends ActionSupport {   
  15.     private String cpage;   
  16.     private String total;   
  17.     private String url;   
  18.   
  19.     public String list() {   
  20.            
  21.         //Get data from server   
  22.         //...   
  23.         //這里沒有做任何邏輯,直接跳轉(zhuǎn)到了頁面   
  24.         return SUCCESS;   
  25.     }   
  26.     public String getCpage() {   
  27.         return cpage;   
  28.     }   
  29.   
  30.     public void setCpage(String cpage) {   
  31.         this.cpage = cpage;   
  32.     }   
  33.   
  34.     public String getTotal() {   
  35.         return total;   
  36.     }   
  37.   
  38.     public void setTotal(String total) {   
  39.         this.total = total;   
  40.     }   
  41.   
  42.     public String getUrl() {   
  43.         return url;   
  44.     }   
  45.   
  46.     public void setUrl(String url) {   
  47.         this.url = url;   
  48.     }   
  49.        
  50.        
  51. }  

  struts.xml

Xml代碼
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" >  
  3. <struts>  
  4.     <package name="tagTest" extends="struts-default">  
  5.                 <action name="list" class="com.tangs.action.DisplayAction">  
  6.                     <result name="success">/list.jsp</result>  
  7.                 </action>  
  8.     </package>  
  9. </struts>  
 

4.在頁面中使用標簽

list.jsp

Html代碼
  1. <%@page contentType="text/html" pageEncoding="UTF-8"%>  
  2. <%@ taglib prefix="tangs" uri="/WEB-INF/tangs.tld"%>  
  3. <%@ taglib prefix="s" uri="/WEB-INF/struts-tags.tld"%>  
  4.   
  5. <html>  
  6.     <head>  
  7.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  8.         <title>List</title>  
  9.     </head>  
  10.     <body>  
  11.         共 <s:property value="total"/> 頁 第 <s:property value="cpage"/> 頁<br>  
  12.         <tangs:pages cpage="%{cpage}" total="%{total}" url="%{url}"/>  
  13.     </body>  
  14. </html>  

 

好了,啟動服務器,從瀏覽器中輸入http://localhost:7001/TagTest/list.page?cpage=1&total=5&url=list.page

就會得到下面的結果:

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
struts2 JSP 實現(xiàn)分頁顯示
[原創(chuàng)]分頁技巧(基于自定義標簽 JSTL Struts) - Woden的專欄 - CS...
spring+struts+hibernate分頁實例
struts2采用convention
Struts 2.0 <s:select>
利用StrutsTestCase測試Struts應用程序
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服