開發 J2EE 自定義標籤需掌握以下關鍵要素:
javax.servlet.jsp.tagext.TagSupportprotected PageContext pageContext,可獲取 JSP 內置對象doStartTag()、doEndTag()SKIP_BODY、SKIP_PAGE、EVAL_PAGE*.tld,定義標籤元資料TagSupport 的類別.tld 描述檔web.xml 註冊標籤庫package demo.tag;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.TagSupport;
import java.io.*;
@SuppressWarnings("serial")
public class TagDemo extends TagSupport {
private int pageSize;
public int getPageSize() { return pageSize; }
public void setPageSize(int pageSize) { this.pageSize = pageSize; }
public int doStartTag() throws JspException {
JspWriter out = pageContext.getOut();
for (int i = 0; i < pageSize; i++) {
try {
out.println("<tr>");
out.println("<td>" + i + "</td>");
out.println("<td>" + (i * 10) + "</td>");
out.println("</tr>");
} catch (IOException e) {
e.printStackTrace();
}
}
return SKIP_BODY;
}
}
TagSupportdoStartTag()(回傳 SKIP_BODY)或 doEndTag()(回傳 SKIP_PAGE 或 EVAL_PAGE)pageContext 獲取 out、request、session、application 等內置對象.tld 中對應宣告.tld,遵循 XML 語法<taglib> 必含 tlib-version、jsp-version、short-name、tag<tag> 內定義 name、tag-class、attribute<attribute> 指定 name、required、type<taglib>
<taglib-uri>abc</taglib-uri>
<taglib-location>/WEB-INF/MyTagLib.tld</taglib-location>
</taglib>
JSP 頁面使用:<%@ taglib uri="abc" prefix="my" %>,然後 <my:showDataTag pageSize="5"/>。