下面提供一種自定義標籤的實現的實現方法,筆者親自驗證通過,供大家參考。主要分爲幾個步驟:
一、編寫標籤類,該類需要繼承自TagSupport基類。
public class ColorTag extends TagSupport {
private String color;
@Override
public int doStartTag() throws JspException {
try {
JspWriter out = this.pageContext.getOut();
if("red".equals(color)) {
out.println("<span style='color:red'>red</span>");
}
if("green".equals(color)) {
out.println("<span style='color:green'>green</span>");
}
if("blue".equals(color)) {
out.println("<span style='color:blue'>blue</span>");
}
}catch(IOException e) {
e.printStackTrace();
}
return SKIP_BODY;
}
@Override
public int doEndTag() throws JspException {
return EVAL_PAGE;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
EVAL_BODY_INCLUDE:告訴服務器正文的內容,並把這些內容送入輸出流
SKIP_BODY:告訴服務器不要處理正文內容
EVAL_PAGE:讓服務器繼續執行頁面
SKIP_PAGE:讓服務器不要處理剩餘的頁面
EVAL_BODY_AGAIN:讓服務器繼續處理正文內容,只有doAfterBody方法可以返回
EVAL_BODY_BUFFERED:BodyTag接口的字段,在doStartTag()返回
EVAL_BODY_INCLUDE、SKIP_BODY一般由doStartTag()返回,而EVAL_PAPGE、SKIP_PAGE由doEndTag()返回。
二、定義標籤描述文件color.tld。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>2.2.3</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>cl</short-name>
<uri>/color</uri>
<display-name>"colorTag"</display-name>
<tag>
<name>color</name>
<tag-class>tci.tag.ColorTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>color</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
三、在web.xml中註冊自定義的標籤。
<jsp-config>
<taglib>
<taglib-uri>/color</taglib-uri>
<taglib-location>/WEB-INF/color.tld</taglib-location>
</taglib>
</jsp-config>
四、在頁面中使用標籤。
引入標籤:<%@ taglib uri="/color" prefix="cl"%>
使用:<cl:color color="red"/>