您的位置:首页 > Web前端 > JavaScript

jsp-定义带标签体的标签

2008-04-13 16:19 155 查看
jsp-定义带标签体的标签--loop
到目前为止,我们定义的都是不带标签体的自定义标签。要定义带标签体的类要继承BodyTagSupport类,BodyTagSupport扩展了TagSupport类,因此doStartTag和doEndTag方法和前面所讲的一样,除了这些方法外BodyTagSupport类还定义了两个重要方法,
1:doAfterBody-该方法每次处理完标签体都要执行。可以重载这个方法来处理自己的标签体,这个方法在结束时通常返回SKIP_BODY,指明没有标签体需要继续处理了,如果这个方法返回EVAL_BODY_TAG,则这个标签体被再次处理,并导致有一次doAfterBody的调用,这种处理将一直持续到doAfterBody返回SKIP_BODY
2:doInitBody--标签体初始化方法。
另外,BodyTagSupport定义了一个成员变量bodyContent,类型是BodyContent。BodyContent是JspWriter的一个子类,通过该类可以访问标签体,该类中存储了对标签体的处理结果,该类的主要方法如下
1:getEnclosingWriter--用来返回doStartTag和doEndTag方法使用的JspWriter对象。
2:getReader--将返回一个Reader可用来读取标签体
3:getString---会返回整个标签体包含的字符串
4:clearBody--清空存储的标签体处理结果
下面还是通过范例来掌握一下此类标签。
loopTag.java代码如下
package tag.test.date;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.io.*;
public class loopTag extends BodyTagSupport{
String userName;
int count;
public loopTag(){
super();
}
public void setUserName(String userName){
this.userName=userName;
}
public void setCount(int count){
this.count=count;
}
public void doInitBody()throws JspTagException{
System.out.println("doInitBody()");
}
public int doStartTag()throws JspTagException{
System.out.println("doStartTag");
if(count>0)
{
return EVAL_BODY_TAG;
}
else
{
return SKIP_BODY;
}
}
public int doAfterBody()throws JspTagException{
System.out.println("doAfterBody()");
if(count-->=1)
{
try
{
JspWriter out=bodyContent.getEnclosingWriter();
out.println(bodyContent.getString()+userName);
out.println("<br>");
bodyContent.clearBody();
}
catch(IOException e)
{
e.printStackTrace();
}
return(EVAL_BODY_TAG);
}
else
{
return (SKIP_BODY);
}
}
public int doEndTag()throws JspTagException{
System.out.println("doEndTag()");
return EVAL_PAGE;
}
}
编译好此文件后把所产生的类拷贝到C:/tomcat/webapps/ROOT/WEB-INF/classes/tag/test/date目录下,

然后编写.tld文件代码,代码如下
<?xml version="1.0" encoding="ISO-8859-1"?>
<taglib>
<tlib-version>1.2</tlib-version>
<jsp-version>1.2</jsp-version>
<shor-name>mytag</shor-name>
<description>the info test example</description>
<tag>
<name>loop</name>
<tag-class>tag.test.date.loopTag</tag-class>
<body-content>jsp</body-content>
<attribute>
<name>userName</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>count</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
这里注意的是<body-content>jsp</body-content>中的内容必须为jsp

注意此文件存放的路径为C:/tomcat/webapps/ROOT/WEB-INF

在然后修改web.xml文件,也就是向web.xml中添加下面内容
<taglib>
<taglib-uri>/loop</taglib-uri>
<taglib-location>/WEB-INF/loopTag.tld</taglib-location>
</taglib>

最后就是编写loopTag.jsp文件了,代码如下
<%@ taglib uri="/loop" prefix="mytag" %>
<html>
<head>
<title>custom tag</title>
</head>
<body>
<hr>
<mytag:loop userName="hua" count="3">
hello I'm
</mytag:loop>
</hr>
</body>
</html>

注意:JSP代码中的<%@ taglib uri="/loop" prefix="mydate" %>uri值必须和web.xml中的<taglib-uri>/loop</taglib-uri>值一致。
做好上面的工作后,启动tomcat,在地址拦中输入http://localhost:8080/loopTag.jsp 后就会看到下面的结果
hello I'm hua
hello I'm hua
hello I'm hua
好通过上面的讲解你一定对JSP的带标签体自定义标签有了一定的了解,现在就自己动手来实验一下把。
如果有什么问题请联系QQ:154174583

你可以通过这个链接引用该篇文章:http://aspjavavbc.bokee.com/viewdiary.18893261.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: