自定義標籤的作成

在Web頁面的開發中,我們經常需要使用各種頁面標籤頁實現相應的功能。儘管工具本身和第三方插件都提供了比較豐富的標籤(比如:大家比較熟悉的stl標籤,struts標籤等),供開發者使用,這些標籤基本上能滿足實際業務的功能需要。但是,有時候結合具體項目、具體業務,我們需要自定義一些標籤來實現一些特有的邏輯功能,這也是是出於Team共通化開發考慮,簡化重複的邏輯代碼,提高項目的生產性。

下面提供一種自定義標籤的實現的實現方法,筆者親自驗證通過,供大家參考。主要分爲幾個步驟:

一、編寫標籤類,該類需要繼承自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"/>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章