学习自定义标签----BodyTagSupport(转)
???? 这几天学习了一下自定义标签.很有意思的东东.
??? 在我看来呀,写一个自定义标签可以分为三步:1:先写一个处理这个标签的JAVA类,我认为这个应该是最重要的,你首先明白你要做的是什么,那么你就要先写这个JAVA类.2:进行编写这个标签的描述文件.3:验证,这一步要编写一个JSP网页来验证你所写的TAG.下面我们用一个实例来告诉大家.
??? (其实我也是刚刚开始学习的,只是认为这样可以而已,呵呵)
目的:我们写一个在我们的JSP页面上输出一些String的标签,这个标签有二个属性:name 和count,其中count是为了控制要显示的条数的,显示的内容由标签体和name共同决定.这个标签还会对它的标签体进行处理.
第一步:写一个JAVA类???? 叫:InfoTagSupport
???? package com.terence.zhaody;
import java.io.IOException;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
//BodyTagSupporte 有一个 bodyContent的成员变量,类型是BodyContent.通过它可以得到很多东西
//-----getEnclosingWriter---用来返回一个JspWriter对象
//-----getReader-----用来返回一个Reader对象
//-----getString----用来返回整个标签体的字符串.
//-----clearBody----清空标签体的处理的结果
public class InfoTagSupport extends BodyTagSupport{
/**
?? *
?? */
private static final long serialVersionUID = 1L;
String userName;
int count;
public InfoTagSupport()
{
?? super();
}
public void setUserName(String userName)
{
?? this.userName=userName;
}
public void setCount(int count)
{
?? this.count=count;
}
public int doStartTag()throws JspTagException
{
?? System.out.print("in dostarttag");
?? if(count>0)
?? {
??? return EVAL_BODY_TAG;
?? }
?? else{
??? return SKIP_BODY;
?? }
}
//doAfterBody?? 这个方法每次执行完标签体都会执行.若返回的是SKIP_BODY 则表示没有标签体要处理了
//若返回的是EVAL_BODY_TAG则表示这个标签休被 在次处理了,并调用下一次的soAfterTag
public int doAfterBody()throws JspTagException
{
?? if(count-->=1)
?? {
??? try
??? {
???? JspWriter out=bodyContent.getEnclosingWriter();
???? out.print(bodyContent.getString()+userName);
???? out.print("<br>");
??? }catch(IOException e)
??? {
???? e.printStackTrace();
??? }
??? return EVAL_BODY_TAG;
?? }
?? else
?? {
??? return SKIP_BODY;
?? }
}
public int doEndTag()throws JspTagException
{
?? return EVAL_PAGE;
}
}
?
?
第二步:编写描述文件:mytag.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>1.1</tlib-version>
<jsp-version>1.2</jsp-version>
<description>It is just a test</description>
<short-name>mytag</short-name>
<tag>
?? <name>info</name>
?? <tag-class>com.terence.InfoTagSupport</tag-class>
?? <body-content>jsp</body-content>
?? <attribute>
??? <name>userName</name>
??? <required>true</required>
?? </attribute>
?? <attribute>
??? <name>count</name>
??? <required>true</required>
?? </attribute>
</tag>
</taglib>
第三步:可以写的一个JSP页面来验证一下,当然还要对web.xml进行配置.