原帖:http://oyprunner.iteye.com/blog/539494
http://blog.csdn.net/achun2050/article/details/1568582
- EVAL_BODY_INCLUDE:把Body讀入存在的輸出流中,doStartTag()函數可用
- EVAL_PAGE:繼續處理頁面,doEndTag()函數可用
- SKIP_BODY:忽略對Body的處理,doStartTag()和doAfterBody()函數可用
- SKIP_PAGE:忽略對餘下頁面的處理,doEndTag()函數可用
- EVAL_BODY_TAG:已經廢止,由EVAL_BODY_BUFFERED取代
- EVAL_BODY_BUFFERED:申請緩衝區,由setBodyContent()函數得到的BodyContent對象來處理tag的body,如果類實現了BodyTag,那麼doStartTag()可用,否則非法
- BodyTagSupport類的方法:
- 編寫標籤對應的實現類時,需要重載BodyTagSupport類幾個方法:doStartTag(), setBodyContent(), doInitBody(), doAfterBody(), doEndTag();
- 他們執行順序如下:
- doStartTag()→doInitBody()→setBodyContent()→doAfterBody()→doEndTag()
- doStartTag()方法可返回EVAL_BODY_INCLUDE或SKIP_BODY,
- 如果返回EVAL_BODY_INCLUDE則繼續執行;
- 如果返回SKIP_BODY則接下來的doInitBody(),setBodyContent(), doAfterBody()三個方法不會被執行,
- 而直接執行doEndTag()方法。
- setBodyContent()方法用於設置標籤體內容,如果在此之前要作一些初始化工作,則在doInitBody()方法中完成。
- 標籤體內容執行完後,會調用doAfterBody()方法,此方法可返回EVAL_BODY_TAG, SKIP_BODY,
- EVAL_PAGE或SKIP_PAGE。
- 如果返回EVAL_BODY_TAG則會再次設置標籤體內容,直到返回SKIP_BODY;
- 如果返回EVAL_PAGE則標籤體執行完後會繼續執行JSP頁面中接下來的部分;
- 如果返回SKIP_PAGE,則JSP頁面的後續內容將不再執行。
- 標籤中靜態常量:
- 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()返回。
EVAL_BODY_INCLUDE隱含1:將body的內容輸出到存在的輸出流中
SKIP_PAGE隱含5 : 忽略剩下的頁面。
EVAL_PAGE隱含6:繼續執行下面的頁
---------------------------------------------------------------
後一:
doStartTag()和doEndTag()返回值是在Tag Interface裏定義的靜態int
SKIP_BODY隱含0
Skip body evaluation. Valid return value for doStartTag and doAfterBody. 跳過對body的處理。
就是跳過了開始和結束標籤之間的代碼。
EVAL_BODY_INCLUDE 隱含1
Evaluate body into existing out stream. Valid return value for doStartTag.
This is an illegal return value for doStartTag when the class implements BodyTag,
since BodyTag implies the creation of a new BodyContent.
將body的內容輸出到存在的輸出流中。包括是jsp代碼,也可以被輸出
SKIP_PAGE 隱含5
Skip the rest of the page. Valid return value for doEndTag.
忽略剩下的頁面。
EVAL_PAGE 隱含6
Continue evaluating the page. Valid return value for doEndTag().
在doStartTag()方法中,若返回EVAL_BODY_INCLUDE就計算標籤的body
若返回SKIP_BODY就不計算標籤的body
在doEndTag()方法中,若返回EVAL_PAGE容器在標籤結束時繼續計算jsp頁面的其它部分,
若返回SKIP_PAGE則在標籤結束時停止計算jsp頁面其他的部分。
當你實現了BodyTag接口時,也就是你進行帶body標籤的開發時,有doAfterBody()方法。
當返回EVAL_BODY_TAG時,表示繼續計算一次BodyTag,直到返回SKIP_BODY纔會調用doEndTag()方法在doStartTag()方法中,若返回EVAL_BODY_INCLUDE就計算標籤的body
若返回SKIP_BODY就不計算標籤的body