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

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

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

    posts - 431,  comments - 344,  trackbacks - 0

    帶有Body的Tag必須實現javax.servlet.jsp.tagext.BodyTag接口。
    BodyTag的處理過程:
    1.當容器創建一個新的標簽實例后,通過setPageContext來設置標簽的頁面上下文。
    2.使用setParent方法設置這個標簽的上一級標簽,如果沒有上一級嵌套,設置為null。
    3.設置標簽的屬性,這個屬性在標簽庫描述文件中定義,如果沒有定義屬性,就不用調用此類方法。
    4.調用doStartTag方法,這個方法可以返回EVAL_BODY_INCLUDE和SKIP_BODY,當返回EVAL_BODY_INCLUDE時,就計算標簽的Body,如果返回SKIP_BODY,就不再計算標簽的Body。
    5.調用setBodyContent設置當前的BodyContent。
    6.調用doInitBody,如果在計算BodyContent時需要進行一些初始化,就在這個方法中進行。
    7.每次計算完BodyTag后調用doAfterBody,如果返回EVAL_BODY_TAG(新的為EVAL_BODY_AGAIN),就表示繼續計算一次BodyTag,直到返回SKIP_BODY才繼續執行第8步。
    8.調用doEndTag方法,這個方法可以返回EVAL_PAGE或者SKIP_PAGE,當返回EVAL_PAGE時,容器將在標簽結束時繼續計算JSP頁面其他的部分;如果返回SKIP_PAGE,容器將在標簽結束時停止計算JSP頁面其他的部分。
    9.調用release()方法釋放標簽程序占用的任何資源。

    下面是一個迭代器標簽例子:
    package com.rain.tag;

    import Java.io.IOException;

    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.JspTagException;
    import javax.servlet.jsp.tagext.BodyContent;
    import javax.servlet.jsp.tagext.BodyTagSupport;

    public class BodyTagExample extends BodyTagSupport {

     int counts;    //counts為迭代的次數
     
     public BodyTagExample(){
      super();
     }
     
     /*
      * 設置counts屬性,這個方法由容器自動調用
      */
     public void setCounts(int c){
      this.counts=c;
     }
     
     @Override
     public int doAfterBody() throws JspException {
      // TODO Auto-generated method stub
      System.out.println("doAfterBody"+counts);
      if(counts>1){
       counts--;
       return EVAL_BODY_AGAIN;
      }else{
       return SKIP_BODY;
      }
     }

     @Override
     public int doEndTag() throws JspException {
      // TODO Auto-generated method stub
      System.out.println("doEndTag");
      try{
       if(bodyContent!=null){
        bodyContent.writeOut(bodyContent.getEnclosingWriter());
       }
      }catch(IOException e){
       throw new JspTagException("IO Error:"+e.getMessage());
      }
      return EVAL_PAGE;
     }

     @Override
     public void doInitBody() throws JspException {
      // TODO Auto-generated method stub
      System.out.println("doInitBody");
     }

     @Override
     public int doStartTag() throws JspException {
      // TODO Auto-generated method stub
      System.out.println("doStartTag");
      if(counts>0){
       return EVAL_BODY_AGAIN;
      }else{
       return SKIP_BODY;
      }
     }

     @Override
     public void setBodyContent(BodyContent arg0) {
      // TODO Auto-generated method stub
      System.out.println("setBodyContent");
      this.bodyContent=arg0;
     }
    }

    <?xml version="1.0" encoding="UTF-8" ?>
    <taglib xmlns="        xmlns:xsi="        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
            version="2.0">
            <description>A tag library exercising SimpleTag handlers.</description>
            <tlib-version>1.0</tlib-version>
           
            <short-name>examples</short-name>
            <uri>/demotag</uri>
            <description>JSP應用開發</description>
            
              <tag>
              <name>loop</name>
              <tag-class>com.rain.tag.BodyTagExample</tag-class>
              <body-content>jsp</body-content>    Body-Content必須為JSP
              <attribute>
                <name>counts</name>                    定義中必須有setCounts(int counts)方法
                <required>true</required>               表示這個屬性是必須的
                <rtexprvalue>true</rtexprvalue>       支持JSP表達式
              </attribute>
            </tag>
    </taglib>

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "<web-app>
     <taglib>
       <taglib-uri>/demotag</taglib-uri>
       <taglib-location>/WEB-INF/mytag.tld</taglib-location>
     </taglib>
    </web-app>

    <%@ page language="
    Java" contentType="text/html; charset=UTF-8"%>
    <%@ taglib uri="/demotag" prefix="bodytag" %>
    <html>
    <head>
    <title>Insert title here</title>
    </head>
    <body>
    <bodytag:loop counts="5">
      現在時間是:<%=new Java.util.Date()%><br>
    </bodytag:loop>
    </body>
    </html>

    執行結果:
    控制臺打印出
    doStartTag
    setBodyContent
    doInitBody
    doAfterBody5
    doAfterBody4
    doAfterBody3
    doAfterBody2
    doAfterBody1
    doEndTag

    頁面顯示
    現在時間是:Mon Jan 22 14:52:43 CST 2007
    現在時間是:Mon Jan 22 14:52:43 CST 2007
    現在時間是:Mon Jan 22 14:52:43 CST 2007
    現在時間是:Mon Jan 22 14:52:43 CST 2007
    現在時間是:Mon Jan 22 14:52:43 CST 2007

    posted on 2007-01-22 14:11 周銳 閱讀(281) 評論(0)  編輯  收藏 所屬分類: Jsp
    主站蜘蛛池模板: 国产精品成人免费视频网站京东 | 久久亚洲精品AB无码播放 | 免费一区二区三区在线视频| 成年人免费观看视频网站| 亚洲欧洲高清有无| 精品无码国产污污污免费网站| 亚洲国产综合无码一区| 女人隐私秘视频黄www免费| 久久精品国产精品亚洲精品| 99久久精品毛片免费播放| 亚洲三区在线观看无套内射| 成人免费乱码大片A毛片| 久久亚洲国产午夜精品理论片| a级毛片在线视频免费观看| 亚洲国产精品VA在线观看麻豆| 久久久久久久久久国产精品免费| 色拍自拍亚洲综合图区| 50岁老女人的毛片免费观看| 亚洲无人区视频大全| 在线观看免费为成年视频| 美女露100%胸无遮挡免费观看| 亚洲AV伊人久久青青草原| 五月天国产成人AV免费观看| 国产亚洲AV无码AV男人的天堂| 四虎影视成人永久免费观看视频 | 亚洲国产人成中文幕一级二级| 在线观看黄片免费入口不卡| 久久亚洲国产视频| 久久久久国色AV免费观看性色| 精品国产亚洲一区二区三区在线观看| 一本色道久久综合亚洲精品高清| 午夜免费福利视频| 亚洲日韩国产AV无码无码精品| 亚洲精品在线视频| 毛片免费全部播放无码| 精品国产亚洲第一区二区三区| 亚洲短视频男人的影院| 97无码免费人妻超级碰碰夜夜| 国产精品黄页免费高清在线观看| 亚洲视频一区网站| 亚洲国产成人久久一区WWW|