<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 93,  comments - 2,  trackbacks - 0

    首先標簽是一個java類,它是運行一個或兩個接口的javabean,然后再配合標簽描述文件(以.tld為擴展名),兩者結合就可以作出自己的自定義標簽庫了。

    自定義標簽必須實現下面三個接口中的一個:Tag、IterationTag、BodyTag 

     

    Tag接口中的返回常數意義:
    EVAL_BODY_INCLUDE:告訴服務器正文的內容,并把這些內容送入輸出流
    SKIP_BODY:告訴服務器不要處理正文內容
    EVAL_PAGE:讓服務器繼續執行頁面
    SKIP_PAGE:讓服務器不要處理剩余的頁面
    EVAL_BODY_AGAIN:讓服務器繼續處理正文內容,只有doAfterBody方法可以返回
    EVAL_BODY_BUFFERED:BodyTag接口的字段,在doStartTag()返回
    EVAL_BODY_INCLUDE、SKIP_BODY一般由doStartTag()返回,而EVAL_PAPGE、SKIP_PAGE由doEndTag()返回。

     

    一個擴展BodyTagSupport的自定義標記的生命周期如下:
    1.創建標記
    2.調用Setter方法
    3.調用doStartTag()方法
    4.調用setBodyContent()方法
    5.調用InitBody()方法
    6.處理標記的Body
    7.doAfterBody();根據返回值,如果為EVAL_BODY_AGAIN,繼續執行6,如果不是,執行8
    8.調用doEndTag()方法
    9.判斷標記是否需要重用,如果要,執行4;否則執行release()方法。

     

    標簽類代碼:

    Java代碼 復制代碼 收藏代碼
    1. package test.jsp.tags;    
    2.   
    3. import javax.servlet.jsp.tagext.BodyTagSupport;    
    4. import javax.servlet.jsp.tagext.BodyContent;    
    5. import javax.servlet.jsp.JspTagException;    
    6.   
    7. public class BodyTagExample extends BodyTagSupport    
    8. {    
    9.     private int counts;   
    10.   
    11.     public BodyTagExample()    
    12.     {   
    13.         super();   
    14.     }   
    15.     public void setCounts(int counts)   
    16.     {   
    17.         this.counts = counts;   
    18.     }   
    19.     public int doStartTag() throws JspTagException   
    20.     {   
    21.         System.out.println("doStartTag...");   
    22.         if (counts > 0)   
    23.         {   
    24.             return EVAL_BODY_TAG;   
    25.         }   
    26.         else  
    27.         {   
    28.             return SKIP_BODY;   
    29.         }   
    30.     }   
    31.     public void setBodyContent(BodyContent bodyContent)   
    32.     {   
    33.         System.out.println("setBodyContent...");   
    34.         this.bodyContent = bodyContent;   
    35.     }   
    36.     public void doInitBody() throws JspTagException   
    37.     {   
    38.         System.out.println("doInitBody....");   
    39.     }   
    40.     public int doAfterBody() throws JspTagException   
    41.     {   
    42.         System.out.println("do After body..." + counts);   
    43.         if (counts > 1)   
    44.         {   
    45.             counts--;   
    46.             return EVAL_BODY_TAG;   
    47.         }   
    48.         else  
    49.         {   
    50.             return SKIP_BODY;   
    51.         }   
    52.     }   
    53.     public int doEndTag() throws JspTagException   
    54.     {   
    55.         System.out.println("do end Tag...");   
    56.         try  
    57.         {   
    58.             if (bodyContent != null)   
    59.             {   
    60.                 bodyContent.writeOut(bodyContent.getEnclosingWriter());   
    61.             }   
    62.         }   
    63.         catch (java.io.IOException e)    
    64.         {    
    65.             throw new JspTagException("IO Error: " + e.getMessage());    
    66.         }    
    67.         return EVAL_PAGE;    
    68.     }    
    69. }   

    tld描述文件源碼:

     

    Java代碼 復制代碼 收藏代碼
    1. <?xml version="1.0" encoding="ISO-8859-1" ?>   
    2. <!DOCTYPE taglib   
    3. PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"  
    4. "   
    5. http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">   
    6. <taglib>   
    7. <tlibversion>1.0</tlibversion>   
    8. <jspversion>1.1</jspversion>   
    9. <shortname>Application Tag Library</shortname>   
    10. <uri>http://jakarta.apache.org/taglibs/struts-example-1.0</uri>   
    11. <info>tag loop</info>   
    12. <tag>   
    13. <name>loop</name>   
    14. <tagclass>test.jsp.tags.BodyTagExample</tagclass>   
    15. <bodycontent>JSP</bodycontent>   
    16. <attribute>   
    17. <name>counts</name>   
    18. <required>true</required>   
    19. <rtexprvalue>true</rtexprvalue>   
    20. </attribute>   
    21. </tag>   
    22. </taglib>  

     

    其中:

    tag中的name屬性:定義了我們的tag名稱,在后面會用到。
    tag中的tagclass屬性:指定了我們這個tag的實現類。
    tage中的bodycontent屬性:指定我們的頁面內容是什么性質的。(注意:在jsp開發中這里必須寫JSP)
    tage中的attribute屬性:定義了我們的這個tag可能有的屬性。
    attribute中的name屬性:指定了屬性的名稱。它和我們類中定義的“int counts;”必須一樣,并且在類中還必須包含一個setCounts(int counts)方法,否則這個屬性就不能設置。
    attribute中的required屬性:表示這個屬性是否是必須的。
    attribute中的rtexprvalue屬性:表示這個屬性是否可以用JSP的程序段的結果輸出。


    tag寫完自后要在web.xml中聲明這個tag

    web.xml代碼如下:

     

    Java代碼 復制代碼 收藏代碼
    1. <?xml version="1.0" encoding="UTF-8"?>    
    2. <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">    
    3. <web-app>    
    4. <taglib>    
    5. <taglib-uri>demotag</taglib-uri>    
    6. <taglib-location>/WEB-INF/tld/mytag.tld</taglib-location>    
    7. </taglib>    
    8. </web-app>   

     

    Jsp引用代碼:

     

    Java代碼 復制代碼 收藏代碼
    1. <%@ page contentType="text/html; charset=GBK" language="java"%>    
    2. <%@ taglib uri="demotag" prefix="demo" %>    
    3. <html>    
    4. <body>    
    5. <br>    
    6. <demo:loop counts="5">    
    7. 現在時間是:<%=new java.util.Date().toString()%><br>    
    8. </demo:loop>    
    9. <br>    
    10. </body>    
    11. </html>   

    posted on 2012-03-26 17:44 Terry Zou 閱讀(209) 評論(0)  編輯  收藏 所屬分類: struts2.1.6

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊

    收藏夾

    Java

    搜索

    •  

    最新隨筆

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产成人啪精品视频免费网| 三年片在线观看免费观看大全一 | 成年女人A毛片免费视频| 国产成人在线观看免费网站| 亚洲av无码无线在线观看| 亚洲AV无码乱码在线观看代蜜桃| 222www免费视频| 亚洲综合色一区二区三区小说| 国产91成人精品亚洲精品| 免费播放一区二区三区| 亚洲精品国产成人影院| 国产精品亚洲综合久久| 成人免费视频小说| 亚洲精品熟女国产| 日韩精品成人无码专区免费| 亚洲字幕AV一区二区三区四区 | 国产亚洲美女精品久久久久| 免费在线观看视频a| 国产免费久久久久久无码| 热99re久久精品精品免费| 香港一级毛片免费看| 中文字幕亚洲专区| 精品无码人妻一区二区免费蜜桃 | 四虎永久免费地址在线网站| 亚洲最新中文字幕| 成年男女免费视频网站| 免费精品视频在线| 久久久久久久亚洲Av无码| 好吊妞788免费视频播放| 亚洲精品资源在线| 妞干网在线免费视频| 一级毛片大全免费播放下载| 国产日产成人免费视频在线观看| 无人视频免费观看免费视频| 亚洲国产精品自在线一区二区| 欧亚精品一区三区免费| 成人a毛片免费视频观看| 亚洲国产精品午夜电影| 亚洲国产一区视频| 嘿嘿嘿视频免费网站在线观看| 亚洲人成电影青青在线播放|