<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 周銳 閱讀(283) 評論(0)  編輯  收藏 所屬分類: Jsp
    主站蜘蛛池模板: 女性无套免费网站在线看| 欧洲精品99毛片免费高清观看| 无码少妇一区二区浪潮免费| 久久亚洲精品成人777大小说| 中文字幕乱理片免费完整的| 亚洲午夜成人精品电影在线观看| 日本永久免费a∨在线视频| 高清在线亚洲精品国产二区| 三年片在线观看免费观看大全中国| 免费在线观看黄网| 久久嫩草影院免费看夜色| 亚洲中文字幕第一页在线| 免费人成激情视频在线观看冫 | 日本二区免费一片黄2019| 亚洲AV日韩AV一区二区三曲| 国产成人精品免费视频大全五级 | 色播在线永久免费视频网站| 无码乱人伦一区二区亚洲| 222www在线观看免费| 亚洲中文无码亚洲人成影院| 免费v片在线观看无遮挡| a级毛片毛片免费观看久潮| 亚洲综合久久久久久中文字幕| 无码专区永久免费AV网站| 国产亚洲精品2021自在线| 亚洲性猛交XXXX| 亚州免费一级毛片| 在线aⅴ亚洲中文字幕| 亚洲Av无码乱码在线播放| 国产精品免费一区二区三区四区| 亚洲成人免费电影| 亚洲第一视频在线观看免费| 久久国产精品免费观看| 亚洲精品成a人在线观看☆| 国产亚洲精品不卡在线| 国产a视频精品免费观看| 老外毛片免费视频播放| 亚洲人成在线播放网站岛国| 国产v片免费播放| 99久久综合精品免费| 日韩亚洲人成在线综合|