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
到目前为止,我们定义的都是不带标签体的自定义标签。要定义带标签体的类要继承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
相关文章推荐
- 在jsp中重复定义了两个相同id的标签导致的错误
- JSP的自定义标签(四)之定义函数
- 深入分析JavaWeb Item23 -- jsp自己定义标签开发入门
- Java web中的web-xml中标签定义之jsp-config
- jsp 自定义标签【EL表达式定义】 简单例子一
- JSP自己定义标签
- jsp标签定义_flowershs
- Java web中的web-xml中标签定义之jsp-config
- JSP页面如何访问标签中定义的变量-使用实现
- 在工程中定义jsp页面可使用的标签
- Jsp - TagLib 标签定义
- JSTL 标签获得jsp页面上定义的变量
- 关于jsp中的tablib标签的定义与使用
- jsp的简单标签定义
- 在jsp的<s:iterator>标签中获取action中的定义的成员变量
- 项目之JSP标签定义时URI报错的问题(产品追溯系统)2016-7-29
- JSP自己定义标签入门实例具体解释
- JSP自己定义标签继承哪个类
- jsp自己定义标签的方法
- JSP自建标签_3_简单标签自定义_为标签定义属性