廣告聯播

2009年4月2日 星期四

[JAVA] Tag Interface 參數及方法說明

From: Polin Wei

所有的標籤 Tag 處理類別均是執行 Tag, IterationTag 或 BodyTag 介面之一的 Java 類別 (class) . 因為 Java 並不支援多重繼承, 因此, 如果現有的類別 (class) 已繼承自某個基礎類別, 就無法使其繼承自必要的標籤 Tag 處理基礎類別了(好像有點饒舌). 但 JSP 提供另一個更好的解決方法, 它仍舊可以只繼承單一基礎類別, 不過這些類別可以執行多個選擇的介面.

執行此介面的類別可以在起始標籤 public int doStartTag() throws JspException 和結束標籤 public int doEndTag() throws JspException 中執行自訂作業, 但不能控制主體內容.

在 doStartTag() 所傳回的值有:
public final static int EVAL_BODY_INCLUDE : 通知伺服器將主體內容放在 out 的資料流中
public final static int SKIP_BODY : 通知伺服器不要處理任何的主體內容

在 doEndTag() 所傳回的值有:
public final static int EVAL_PAGE : 通知伺服器繼續評估網頁
public final static int SKIP_PAGE : 通知伺服器不要處理網頁的其餘部份

方法:
public int doStartTag() : 如果傳回 SKIP_BODY 則直接呼叫 doEndTag() ; 如果傳回 EVAL_BODY , 則將主體內容放在 out 資料流中.

public int doEndTag() : 之前已呼叫過 doStartTag() , 主體內容可能已經處理過, 也可能沒有處理過, 如果傳回 SKIP_PAGE , 此網頁就不再作任何評估, 就此結束; 如果傳回 EVAL_PAGE, 網頁就會繼續評估.

public abstract void setPageContext() : 設定目前的 PageContext , 並在伺服器呼叫 doStartTag() 之前.

public abstract javax.servlet.jsp.tagext.Tag getParent() : 取得最近的標籤處理常式, 並封裝此標籤處理常式, 如果找不到就傳回 null

public abstract void setParent() : 此方法設定父階標籤處理常式, 會由 getParent() 傳回, 在 doStartTag() 之前呼叫, 因此視需要存取父階的標籤處理常式

再次看 Tag 的程式運作的流程圖, 應該就比較瞭解了

沒有留言:

張貼留言