<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

    搜索

    •  

    最新隨筆

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产福利在线观看永久免费| 亚洲精华国产精华精华液| 精品国产污污免费网站入口| 四虎永久在线精品视频免费观看| 亚洲一级特黄特黄的大片| 欧洲乱码伦视频免费| 亚洲一欧洲中文字幕在线| 无码一区二区三区AV免费| 亚洲中文字幕久久无码| 午夜男人一级毛片免费| 人妻无码中文字幕免费视频蜜桃| 亚洲精品99久久久久中文字幕| 一区二区在线免费视频| 亚洲gv猛男gv无码男同短文| 8x8×在线永久免费视频| 亚洲一级毛片在线观| 天天看免费高清影视| 日韩在线一区二区三区免费视频 | 久久国产精品一区免费下载| 亚洲黄色在线播放| 免费看美女被靠到爽| 五月天婷婷精品免费视频| 国产AV无码专区亚洲Av| 麻豆视频免费观看| 美景之屋4在线未删减免费| 国产亚洲精AA在线观看SEE| 永久免费在线观看视频| 亚洲AV成人一区二区三区观看| 亚洲国产精品自产在线播放| 久久精品乱子伦免费| 中文无码亚洲精品字幕| 在线亚洲精品福利网址导航| 6080午夜一级毛片免费看6080夜福利| 亚洲国产日韩精品| 亚洲线精品一区二区三区影音先锋| 免费女人高潮流视频在线观看| 亚洲精品无码成人| 亚洲AV无码第一区二区三区| 免费av欧美国产在钱| 中文字幕不卡高清免费| 在线观看亚洲AV日韩A∨|