實(shí)現(xiàn)一個(gè)簡(jiǎn)單的JSP自定義標(biāo)簽開(kāi)發(fā)過(guò)程

字號(hào):


    1.首先創(chuàng)建實(shí)現(xiàn)了Tag功能的輔助類,功能是改變主體文本的顏色。這個(gè)類可以繼承TagSupport或者BodyTagSupport,兩者的差別是前者適用于沒(méi)有主體的標(biāo)簽,而后者適用于有主體的標(biāo)簽。如果選擇繼承TagSupport,可以實(shí)現(xiàn)doStartTag和doEndTag兩個(gè)方法實(shí)現(xiàn)Tag的功能,如果選擇繼承BodyTagSupport,可以實(shí)現(xiàn)doAfterBody這個(gè)方法。核心代碼如下所示:import java.io.IOException;
    import javax.servlet.jsp.JspWriter;
    import javax.servlet.jsp.tagext.*;
    /** *//**
    *
    * @author Administrator
    */
    public class MessageWriterTagHandler extends BodyTagSupport...{
    //主體的字體顏色屬性
    protected String _fontColor = "black";
    /** *//** Creates a new instance of MessageWriterTagHandler */
    public MessageWriterTagHandler() ...{
    }
    public String getFontColor() ...{
    return _fontColor;
    }
    public void setFontColor(String fontColor) ...{
    _fontColor = fontColor;
    }
    public int doAfterBody()...{
    BodyContent bc = this.getBodyContent();
    JspWriter out = bc.getEnclosingWriter();
    StringBuffer sb = new StringBuffer();
    try ...{
    sb.append("
    sb.append(_fontColor);
    sb.append("">");
    sb.append(bc.getString());
    sb.append("");
    out.print(sb.toString());
    } catch (IOException ex) ...{
    //ex.printStackTrace();
    }
    return EVAL_PAGE;
    }
    }
    2.編寫.tld文件,該文件是tag的描述,需要說(shuō)明的是tag的attribute的required要設(shè)置為true,否則的話標(biāo)簽的功能有可能無(wú)法使用。具體原因我還不清楚。tld的代碼如下所示:
    xmlns:xsi=""
    xsi:schemaLocation=" web-jsptaglibrary_2_0.xsd">
    1.0
    writer
    tags/MessageWriter
    write
    com.lilijun.tags.MessageWriterTagHandler
    JSP
    fontColor
    true>