常用接口調用方式 java調用接口的方法流程

在自定義標簽的開發過程中,有時需要對標簽體的內容進行重復處理,這時,可以使用IterationTag接口,它繼承自Tag 接口,在Tag接口基礎上新增了一個 EVAL_BODY_AGAIN常量和一個 doAfterBody()方法,具體如下 。

常用接口調用方式 java調用接口的方法流程

文章插圖
1. EVAL_BODY_AGAIN常量
EVAL_BODY_AGAIN常量是doAfterBody()方法的返回值,如果doAfterBody()方法返回該常量,JSP容器會把標簽體的內容重復執行一次 。
2. int doAfterBody()方法
JSP容器在每次執行完標簽體后會調用doAfterBody()方法,該方法可以返回常量SKIP_BODY和EVAL_BODY_AGAIN 。如果方法返回SKIP_BODY常量,JSP容器回執行代表結束的標簽的doEndTag()方法,如果返回EVAL_BODY_AGAIN,則重復執行標簽體 。
為了讓讀者更好地學習IterationTag接口,接下來通過一個案例演示如何使用IterationTag接口實現重復執行標然休的功能,具體步驟如下 。
(1)編寫標簽處理器類 。
建Web工程chapter1,并在工程下編寫標簽處理器類Iterate.java 。由于TagSupport類實現了IterationTag接口,為了簡化程序的編寫,我們定義的標簽處理器類只需繼承TagSupport類即可,Iterate.java類的實現代碼如下代碼所示 。
package cn.itcast.chapter01.classisctag;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.*;public class Iterate extends TagSupport {//定義變量private int num;
//提供num屬性的setter方法public void setNum(int num) {this.num = num;}
//執行一次標簽體public int doStartTag() throws JspException {return Tag.EVAL_BODY_INCLUDE;}
//根據屬性值對標簽體進行執行public int doAfterBody() throws JspException {num–;if (num > 0) {return EVAL_BODY_AGAIN;} else {return SKIP_BODY;//跳過標簽體}}}
在上面代碼中,成員變量num用于接收標簽num屬性的值,用來決定標簽體的執行次數 。由于doStartTag()方法的返回值為EVAL_BODY_INCLUDE,在執行doAfterBody()方法之前,標簽體已經執行了一次,因此在doAfterBody()方法中判斷if條件之前先將num的值自減一次 。
【常用接口調用方式 java調用接口的方法流程】(2)注冊標簽處理器類 。
在mytag.tld文件中增加一個Tag元素,對標簽處理器類進行注冊,注冊信息如下所示 。
iteratecn.itcast.chante-01.c1assisctaa.IterateJSPnumtrue
(3)編寫JSP頁面iterate.jsp 。
在JSP頁面中使用標簽,將num屬性的值設置為5,同時將標簽體的內容設置為“hello.itcast!”。iterate.jsp頁面如上面所示 。
iterate Tag hello,itcast!
(4)啟動Tomcat服務器,在瀏覽器地址欄中輸入“http://localhost:8080/chapter01/iterate.jsp”訪問iterate.jsp頁面,可以發現,在瀏覽器中標簽體內容“hello,itcast!”顯示了5遍 。說明編寫的自定義標簽實現了重復執行標簽體的功能 。

    推薦閱讀