欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Struts2中實(shí)現自定義分頁(yè)標簽

Struts2中實(shí)現自定義分頁(yè)標簽

    Struts2中實(shí)現自定義標簽很簡(jiǎn)單,主要分為3步:

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

    2.編寫(xiě)自定義標簽類(lèi)。

    3.在頁(yè)面中使用標簽。

    下面以一個(gè)自定義的分頁(yè)標簽為例,進(jìn)行說(shuō)明。

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

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類(lèi)是為了獲得標簽中的屬性值,并包裝成Component對象。繼承Component類(lèi)是為了從Struts2中的ValueStack中獲得相對應的值。

1.聲明自定義標簽。

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

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>   //標簽類(lèi)   
  13.             <body-content>empty</body-content>  
  14.             <attribute>   //標簽中的屬性   
  15.                 <name>cpage</name>  //屬性名   
  16.                 <required>true</required>  //是否必須   
  17.                 <rtexprvalue>true</rtexprvalue>  //表示該自定義標簽的某屬性的值可以直接指定或者通過(guò)動(dòng)態(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.編寫(xiě)標簽類(lèi)

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.  * 分頁(yè)標簽  
  11.  * @author tangs  
  12.  */  
  13. public class PageTag extends ComponentTagSupport {   
  14.     private String cpage;  //當前頁(yè)   
  15.     private String total;  //總頁(yè)數   
  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,分頁(yè)的邏輯處理都在這個(gè)Component中   
  33.     }   
  34.   
  35.     //獲得參數   
  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.  * 分頁(yè)邏輯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中取出數值   
  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.                 //當前頁(yè)與總頁(yè)數相等   
  87.                 if (cpage.equals(total)) {   
  88.                     //如果total = 1,則無(wú)需分頁(yè),顯示“[第1頁(yè)] [共1頁(yè)]”   
  89.                     if ("1".equals(total)) {   
  90.                         str.append("[第 " + cpage + " 頁(yè)]");   
  91.                         str.append(" [共 " + total + " 頁(yè)]");   
  92.                     } else {   
  93.                         //到達最后一頁(yè),顯示“[首頁(yè)] [上一頁(yè)] [末頁(yè)]”   
  94.                         str.append("<a href='");   
  95.                         str.append(url);   
  96.                         str.append("?cpage=1&total="+total+"&url="+url);   
  97.                         str.append("'>[首頁(yè)]</a> <a href='");   
  98.                         str.append(url);   
  99.                         str.append("?cpage=" + (cpageInt - 1) + "&total=" + total+"&url="+url);   
  100.                         str.append("'>[上一頁(yè)]</a> <a href='");   
  101.                         str.append(url);   
  102.                         str.append("?cpage=" + total + "&total=" + total+"&url="+url);   
  103.                         str.append("'>[末頁(yè)]</a>");   
  104.                     }   
  105.                 } else {   
  106.                     //當前頁(yè)與總頁(yè)數不相同   
  107.                     if ("1".equals(cpage)) {   
  108.                         //第一頁(yè),顯示“[首頁(yè)] [下一頁(yè)] [末頁(yè)]”   
  109.                         str.append("<a href='");   
  110.                         str.append(url);   
  111.                         str.append("?cpage=1&total="+total+"&url="+url);   
  112.                         str.append("'>[首頁(yè)]</a> <a href='");   
  113.                         str.append(url);   
  114.                         str.append("?cpage=" + (cpageInt + 1) + "&total=" + total+"&url="+url);   
  115.                         str.append("'>[下一頁(yè)]</a> <a href='");   
  116.                         str.append(url);   
  117.                         str.append("?cpage=" + total + "&total=" + total+"&url="+url);   
  118.                         str.append("'>[末頁(yè)]</a>");   
  119.                     } else {   
  120.                         //不是第一頁(yè),顯示“[首頁(yè)] [上一頁(yè)] [下一頁(yè)] [末頁(yè)]”   
  121.                         str.append("<a href='");   
  122.                         str.append(url);   
  123.                         str.append("?cpage=1&total="+total+"&url="+url);   
  124.                         str.append("'>[首頁(yè)]</a> <a href='");   
  125.                         str.append(url);   
  126.                         str.append("?cpage=" + (cpageInt - 1) + "&total=" + total+"&url="+url);   
  127.                         str.append("'>[上一頁(yè)]</a> <a href='");   
  128.                         str.append(url);   
  129.                         str.append("?cpage=" + (cpageInt + 1) + "&total=" + total+"&url="+url);   
  130.                         str.append("'>[下一頁(yè)]</a> <a href='");   
  131.                         str.append(url);   
  132.                         str.append("?cpage=" + total + "&total=" + total+"&url="+url);   
  133.                         str.append("'>[末頁(yè)]</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.服務(wù)端

服務(wù)端主要是獲得請求然后轉向顯示的頁(yè)面

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.         //這里沒(méi)有做任何邏輯,直接跳轉到了頁(yè)面   
  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.在頁(yè)面中使用標簽

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"/> 頁(yè) 第 <s:property value="cpage"/> 頁(yè)<br>  
  12.         <tangs:pages cpage="%{cpage}" total="%{total}" url="%{url}"/>  
  13.     </body>  
  14. </html>  

 

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

就會(huì )得到下面的結果:

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

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久