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 >