首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Struts 自定義 Taglib 開發全攻略:從核心接口到最佳實踐

     編輯:Java 相關知識

三大核心接口體系

自定義標簽必須實現以下接口之一,官方提供對應支援類減輕開發負擔:

接口支援類適用場景關鍵方法
TagTagSupport簡單標簽,無需操作 BodydoStartTag, doEndTag
IterationTagTagSupport需迭代 Body 內容doAfterBody
BodyTagBodyTagSupport需讀取/修改 Body 內容doInitBody, setBodyContent

標簽生命週期與返回常量

BodyTagSupport 完整週期:

  1. 構造實例
  2. 調用 Setter 注入屬性
  3. doStartTag() → 返回 EVAL_BODY_BUFFERED 創建 BodyContent
  4. setBodyContent() 注入 Body 內容對象
  5. doInitBody() 初始化
  6. 處理 Body 內容
  7. doAfterBody() → EVAL_BODY_AGAIN 繼續迭代,否則進入結束
  8. doEndTag() → EVAL_PAGE/SKIP_PAGE
  9. 釋放資源 release()

常用返回常量:

  • EVAL_BODY_INCLUDE:輸出 Body 到頁面
  • SKIP_BODY:忽略 Body
  • EVAL_BODY_BUFFERED:緩存 Body 供修改
  • EVAL_BODY_AGAIN:重新評估 Body(僅 doAfterBody)
  • EVAL_PAGE:繼續執行頁面
  • SKIP_PAGE:終止頁面執行

進階功能:屬性、變量、驗證

1. 動態屬性

TLD 定義 <attribute>,Java 類提供 setXxx()。<rtexprvalue>true</rtexprvalue> 允許腳本表達式。

2. 腳本變量導出

兩種方式:

  • TLD 靜態定義:<variable> + <name-from-attribute>/<name-given> + pageContext.setAttribute()
  • TagExtraInfo (TEI) 動態定義:實現 getVariableInfo(TagData) 返回 VariableInfo[],TLD 添加 <tei-class>
public VariableInfo[] getVariableInfo(TagData data) {
    String varName = data.getAttributeString("name");
    return new VariableInfo[] { new VariableInfo(varName, "String[]", true, VariableInfo.AT_END) };
}

3. 編譯期驗證

  • JSP 1.1:TEI 實現 isValid(TagData)
  • JSP 1.2:TagLibraryValidator,驗證整個頁面 XML,配置在 TLD <validator>,功能更強但複雜度更高

頁面上下文與父標簽協作

pageContext 提供九大隱含對象訪問入口:getOut()、getRequest()、getSession()、getServletContext() 等。

查找父標簽:findAncestorWithClass(this, ParentTag.class)。

JSP 1.2 新特性

  • TryCatchFinally 接口:doCatch(Throwable) 捕獲標簽異常,doFinally() 保證資源釋放
  • TLD <uri> + META-INF/Manifest.mf 實現標簽庫自動發現,無需 web.xml 映射

開發原則與避坑指南

  1. 腳本變量極簡化:允許設計者命名、盡量減少數量、封裝為 JavaBean
  2. 協作標簽避免造語言:優先用腳本變量傳遞數據
  3. 邏輯與展現分離:標簽不生成 HTML,輸出數據結構,由 JSP/CSS 控制樣式
  4. 異常安全:實現 TryCatchFinally 保證連接/流關閉

總結

掌握 Tag/IterationTag/BodyTag 三層接口體系、生命週期常量、TEI/Validator 驗證機制、頁面上下文訪問,即可開發出健壯、可複用、符合規範的企業級標簽庫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved