<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
    主站蜘蛛池模板: 国产91久久久久久久免费| 日本免费福利视频| 亚洲欭美日韩颜射在线二| 无码AV动漫精品一区二区免费 | 99re在线这里只有精品免费| 国产精品免费福利久久| 亚洲av午夜福利精品一区| 亚洲一卡2卡4卡5卡6卡在线99| 久久久久av无码免费网| 亚洲国产亚洲综合在线尤物| 在线观看免费高清视频| 亚洲伦理中文字幕| 国产一级淫片a免费播放口之| 男女啪啪免费体验区| 国产偷国产偷亚洲高清日韩| 亚洲五月综合缴情婷婷| 啦啦啦在线免费视频| 亚洲AV无码欧洲AV无码网站| 99精品视频在线观看免费播放 | 亚洲成a人无码亚洲成www牛牛 | 国产精品高清免费网站| 免费毛片网站在线观看| 91亚洲一区二区在线观看不卡 | 思思re热免费精品视频66| 亚洲精品无码专区久久久| 亚洲AV无码成人网站在线观看| 99re6免费视频| 亚洲欧洲日本在线观看| 国产成人无码免费视频97| 国产成人无码免费看片软件| 亚洲国产人成网站在线电影动漫| 国产四虎免费精品视频| 亚洲视频一区在线播放| 免费网站看v片在线香蕉| 一级特黄录像免费播放肥| 久久久久久亚洲Av无码精品专口| 日韩免费电影网站| 亚洲成av人片天堂网无码】| 国产成人精品久久亚洲| 美女视频黄是免费的网址| 一级女性全黄久久生活片免费|