使用BodyTagSupport类实现Jsp自定义标签

 

编写标签对应的实现类并继承BodyTagSupport类,一般需要重载BodyTagSupport类几个方法:doStartTag(), setBodyContent(), doInitBody(), doAfterBody(), doEndTag();
他们执行顺序是doStartTag()-->doInitBody()-->setBodyContent()-->AfterBody()-->EndTag()
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)编写标签处理类,如:

public class ForumPagerTag extends BodyTagSupport{

private String name;
private String url;

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>page</shortname>
 <uri>http://www.xx.com.cn/tags/forumtaglib-pager</uri>
 <tag>
  <name>pager</name>
  <tagclass>pager.taglib.ForumPagerTag</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/tags/forumtaglib-pager</taglib-uri>
	<taglib-location>
           /WEB-INF/tld/forumtaglib-pager.tld
	</taglib-location>
</taglib>

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

<%@ taglib uri="http://www.xx.com.cn/tags/forumtaglib-pager" prefix="forumPager" %>
<forumPager:pager url="${ctx}/ebusiness/portal/portalpostsAction!findPosts.action" name="pc">
</forumPager:pager>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值