这几天学习了一下自定义标签.很有意思的东东.
在我看来呀,写一个自定义标签可以分为三步: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进行配置.