首先标签是一个java类,它是运行一个或两个接口的javabean,然后再配合标签描述文件(以.tld为扩展名),两者结合就可以作出自己的自定义标签库了。
自定义标签必须实现下面三个接口中的一个:Tag、IterationTag、BodyTag
Tag接口中的返回常数意义:
EVAL_BODY_INCLUDE:告诉服务器正文的内容,并把这些内容送入输出流
SKIP_BODY:告诉服务器不要处理正文内容
EVAL_PAGE:让服务器继续执行页面
SKIP_PAGE:让服务器不要处理剩余的页面
EVAL_BODY_AGAIN:让服务器继续处理正文内容,只有doAfterBody方法可以返回
EVAL_BODY_BUFFERED:BodyTag接口的字段,在doStartTag()返回
EVAL_BODY_INCLUDE、SKIP_BODY一般由doStartTag()返回,而EVAL_PAPGE、SKIP_PAGE由doEndTag()返回。
一个扩展BodyTagSupport的自定义标记的生命周期如下:
1.创建标记
2.调用Setter方法
3.调用doStartTag()方法
4.调用setBodyContent()方法
5.调用InitBody()方法
6.处理标记的Body
7.doAfterBody();根据返回值,如果为EVAL_BODY_AGAIN,继续执行6,如果不是,执行8
8.调用doEndTag()方法
9.判断标记是否需要重用,如果要,执行4;否则执行release()方法。
标签类代码:
package test.jsp.tags;
import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.JspTagException;
public class BodyTagExample extends BodyTagSupport
{
private int counts;
public BodyTagExample()
{
super();
}
public void setCounts(int counts)
{
this.counts = counts;
}
public int doStartTag() throws JspTagException
{
System.out.println("doStartTag...");
if (counts > 0)
{
return EVAL_BODY_TAG;
}
else
{
return SKIP_BODY;
}
}
public void setBodyContent(BodyContent bodyContent)
{
System.out.println("setBodyContent...");
this.bodyContent = bodyContent;
}
public void doInitBody() throws JspTagException
{
System.out.println("doInitBody....");
}
public int doAfterBody() throws JspTagException
{
System.out.println("do After body..." + counts);
if (counts > 1)
{
counts--;
return EVAL_BODY_TAG;
}
else
{
return SKIP_BODY;
}
}
public int doEndTag() throws JspTagException
{
System.out.println("do end Tag...");
try
{
if (bodyContent != null)
{
bodyContent.writeOut(bodyContent.getEnclosingWriter());
}
}
catch (java.io.IOException e)
{
throw new JspTagException("IO Error: " + e.getMessage());
}
return EVAL_PAGE;
}
}
tld描述文件源码:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"
http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>Application Tag Library</shortname>
<uri>http://jakarta.apache.org/taglibs/struts-example-1.0</uri>
<info>tag loop</info>
<tag>
<name>loop</name>
<tagclass>test.jsp.tags.BodyTagExample</tagclass>
<bodycontent>JSP</bodycontent>
<attribute>
<name>counts</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
其中:
tag中的name属性:定义了我们的tag名称,在后面会用到。
tag中的tagclass属性:指定了我们这个tag的实现类。
tage中的bodycontent属性:指定我们的页面内容是什么性质的。(注意:在jsp开发中这里必须写JSP)
tage中的attribute属性:定义了我们的这个tag可能有的属性。
attribute中的name属性:指定了属性的名称。它和我们类中定义的“int counts;”必须一样,并且在类中还必须包含一个setCounts(int counts)方法,否则这个属性就不能设置。
attribute中的required属性:表示这个属性是否是必须的。
attribute中的rtexprvalue属性:表示这个属性是否可以用JSP的程序段的结果输出。
tag写完自后要在web.xml中声明这个tag
web.xml代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<taglib>
<taglib-uri>demotag</taglib-uri>
<taglib-location>/WEB-INF/tld/mytag.tld</taglib-location>
</taglib>
</web-app>
Jsp引用代码:
<%@ page contentType="text/html; charset=GBK" language="java"%>
<%@ taglib uri="demotag" prefix="demo" %>
<html>
<body>
<br>
<demo:loop counts="5">
现在时间是:<%=new java.util.Date().toString()%><br>
</demo:loop>
<br>
</body>
</html>
分享到:
相关推荐
STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS自定义标签STRUTS...
举例解说Bean Tags,HTML Tags 以及Logic Tags的使用方法。
day06_struts自定义标签1
struts实现自定义标签
自定义标签,直接代码,直接模仿开发即可 public class ButtonTag extends AttributeTag { //tld中定义的属性 public String label; public String url; public String click; public String confirm; public ...
struts自定义标签,是个例子,做参考用
通过struts2 自定义标签实例,可以用这个对项目中的实现自定义标签。从而减少代码。
Struts2中实现自定义标签很简单,主要分为3步: 1.创建taglib文件(.tld),编写标签声明。 2.编写自定义标签类。 3.在页面中使用标签。 下面以一个自定义的分页标签为例,进行说明。 其实,开发自定义标签并不...
tag struts2 自定义标签 实例 tag struts2的自定义标签实例
Struts2自定义标签,附带配置文件及后台代码,从工作当中整理
struts2自定义标签struts2自定义标签struts2自定义标签struts2自定义标签
Struts2自定义分页标签很详细了,新手可以少走弯路,节约时间 资源包括了后台如何操作。
跑的还不错 初学习者真得看看 哈哈
基于struts2的自定义分页标签实现的一个demo,连接数据库为Oracle
自定义标签实现分页,分页信息都封装在一个继承自TagSupport的java文件中,自定义一个tld文件,jsp页面通过taglib指令引入tld文件,使用自定义标签。
Struts 2 自定义标签分页,有简单上下分页和数字分页