学习自定义标签----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进行配置.

你可能感兴趣的:(TagSupport)