<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

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

    自定義標(biāo)簽必須實現(xiàn)下面三個接口中的一個:Tag、IterationTag、BodyTag 

     

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

     

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

     

    標(biāo)簽類代碼:

    Java代碼 復(fù)制代碼 收藏代碼
    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代碼 復(fù)制代碼 收藏代碼
    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的實現(xiàn)類。
    tage中的bodycontent屬性:指定我們的頁面內(nèi)容是什么性質(zhì)的。(注意:在jsp開發(fā)中這里必須寫JSP)
    tage中的attribute屬性:定義了我們的這個tag可能有的屬性。
    attribute中的name屬性:指定了屬性的名稱。它和我們類中定義的“int counts;”必須一樣,并且在類中還必須包含一個setCounts(int counts)方法,否則這個屬性就不能設(shè)置。
    attribute中的required屬性:表示這個屬性是否是必須的。
    attribute中的rtexprvalue屬性:表示這個屬性是否可以用JSP的程序段的結(jié)果輸出。


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

    web.xml代碼如下:

     

    Java代碼 復(fù)制代碼 收藏代碼
    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代碼 復(fù)制代碼 收藏代碼
    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. 現(xiàn)在時間是:<%=new java.util.Date().toString()%><br>    
    8. </demo:loop>    
    9. <br>    
    10. </body>    
    11. </html>   

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

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


    網(wǎng)站導(dǎo)航:
     
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊

    收藏夾

    Java

    搜索

    •  

    最新隨筆

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲天堂中文字幕在线观看| 亚洲w码欧洲s码免费| 亚洲不卡中文字幕无码| 1000部拍拍拍18勿入免费凤凰福利| 亚洲一级高清在线中文字幕| 中文字幕永久免费视频| 伊人久久亚洲综合影院| 日本在线免费播放| 亚洲综合激情五月丁香六月| 最新精品亚洲成a人在线观看| 最近中文字幕mv免费高清视频8| 色窝窝亚洲AV网在线观看| 亚洲成年轻人电影网站www| 午夜无遮挡羞羞漫画免费| 久久国产乱子免费精品| 深夜a级毛片免费无码| 亚洲综合久久久久久中文字幕| 成人亚洲综合天堂| 中文毛片无遮挡高潮免费| 亚洲精品在线电影| 亚洲精品美女久久久久99小说| 免费在线观看h片| a级成人毛片免费视频高清| 亚洲av日韩aⅴ无码色老头| 亚洲精品在线电影| 亚洲级αV无码毛片久久精品| 在线成人a毛片免费播放| 久久久久国产精品免费看| 黄网站色视频免费观看45分钟| 亚洲国产成人手机在线电影bd| 亚洲男人的天堂www| 2019中文字幕免费电影在线播放| 一区二区三区免费看| 亚洲AV永久无码精品一福利| 亚洲欧洲精品一区二区三区| 亚洲无线一二三四区手机| 性xxxx视频免费播放直播| 一级毛片在线播放免费| 国产亚洲福利精品一区二区| 亚洲欧洲另类春色校园网站| 亚洲an天堂an在线观看|