天天看点

BodyTagSupport自定义标签

BodyTagSupport类的方法: 

编写标签对应的实现类时,需要重载BodyTagSupport类几个方法:doStartTag(), setBodyContent(), doInitBody(), doAfterBody(), doEndTag(); 

他们执行顺序如下: 

doStartTag()—>doInitBody()-->setBodyContent()àdoAfterBody()àdoEndTag() 

doStartTag()方法可返回EVAL_BODY_INCLUDE或SKIP_BODY, 

如果返回EVAL_BODY_INCLUDE则继续执行; 

如果返回SKIP_BODY则接下来的doInitBody(),setBodyContent(), doAfterBody()三个方法不会被执行, 

而直接执行doEndTag()方法。 

setBodyContent()方法用于设置标签体内容,如果在此之前要作一些初始化工作,则在doInitBody()方法中完成。 

标签体内容执行完后,会调用doAfterBody()方法,此方法可返回EVAL_BODY_TAG, SKIP_BODY, 

EVAL_PAGE或SKIP_PAGE。 

如果返回EVAL_BODY_TAG则会再次设置标签体内容,直到返回SKIP_BODY; 

如果返回EVAL_PAGE则标签体执行完后会继续执行JSP页面中接下来的部分; 

如果返回SKIP_PAGE,则JSP页面的后续内容将不再执行。

自定义JSP标签的一般步骤

(1)编写标签处理类,如:

package cn.com.mytag;

public class MyTag extends BodyTagSupport{

    public int doStartTag() throws JspException {

        return EVAL_PAGE;

    }

}

(2)创建标签库描述符(TLD),如:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"

"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">

<taglib>

<tlibversion>1.0</tlibversion>

<jspversion>1.1</jspversion>

<shortname>myTag</shortname>

<uri>http://www.xx.com.cn/tags/myTag </uri>

<tag>

<name>tag</name><!—-页面上使用 -- >

<tagclass> cn.com.mytag.MyTag</tagclass>

<attribute>

<name>name</name><!—参数-- >

<required>true</required>

</attribute>

<attribute>

<name>url</name><!—参数-- >

<required>true</required>

<rtexprvalue>true</rtexprvalue>

</attribute>

</tag>

</taglib>

(3)web.xml配置标签库

<taglib>

    <taglib-uri> http://www.xx.com.cn/tags/myTag</taglib-uri>

    <taglib-location>

        /WEB-INF/tld/myTag.tld

    </taglib-location>

</taglib>

(4) 在JSP页面中使用标签,如:

<%@taglib uri="/WEB-INF/tld/myTag.tld" prefix="myTag" %>

<myTag:tag >

</myTag:tag >

继续阅读