如果在自訂標籤庫時,並不需要對標籤本體作處理,則您可以繼承TagSupport類別,TagSupport類別實作了Tag與
IterationTag介面,IterationTag介面則是Tag介面的子介面,TagSupport類別替您預先實作了這兩個介面中的方法,在繼承TagSupport之後,您視需要來改寫當中的一些方法(這是
Default Adapter模式)。
Tag介面中與標籤處相關的方法主要有:doStartTag()、doEndTag()。其中doStartTag()方法是遇到標籤開始時會呼叫的方法,其合法的回傳值是EVAL_BODY_INCLUDE與SKIP_BODY,前者表示將顯示標籤間的本體文字,後者表示不顯示標籤間的本體文字;doEndTag()方法是在遇到標籤結束時呼叫的方法,其合法的回傳值是EVAL_PAGE與SKIP_PAGE,傳回前者表示處理完標籤後繼承執行以下JSP網頁,傳回後者則表示不處理接下來的JSP網頁。
IterationTag介面繼承Tag介面,在標籤處理上增加了doAfterBody(),這個方法是在顯示完標籤間文字本體之後呼叫的,其合法的回傳值有EVAL_BODY_AGAIN與SKIP_BODY,如果傳回前者,則會再顯示一次標籤間的文字本體,傳回後者則繼承執行標籤處理的下一步。
TagSupport類別實作了Tag與IterationTag介面,其預設的回傳值是:doStartTag()回傳
SKIP_BODY、doAfterBodyTag()回傳SKIP_BODY、doEndTag()回傳EVAL_PAGE。所以在繼承
TagSupport之後,如果沒有改寫任何的方法,則在標籤處理上執行的順序是:
doStartTag() ->
不顯示本體文字
-> doEndTag() ->
執行接下來的JSP網頁
如果您改寫了doStartTag(),則您必須指定回傳值,如果指定了EVAL_BODY_INCLUDE,則預設會照以下的順序執行:
doStartTag() ->
顯示本體文字
-> doAfterBodyTag()->doEndTag()->執行接下來的JSP網頁
|