jsp自定义标签 TagSupport
2014-07-23 17:57
211 查看
定义最简单的标签
自定义标签采用Default Adapter模式(缺省适配模式)
Java代码
Java代码
//最简单的标签
public class LangHuaTag extends TagSupport {
private long startTime;
private long endTime;
public int doStartTag() throws JspException {
startTime = System.currentTimeMillis();
//表示定制标记里面有所包括的JSP页面
return TagSupport.EVAL_BODY_INCLUDE;
}
public int doEndTag() throws JspException {
endTime = System.currentTimeMillis();
long elapsed = endTime - startTime;
try {
JspWriter out = pageContext.getOut();
out.println("runtime is "+ elapsed);
} catch (IOException e) {
e.printStackTrace();
}
//表示JSP页面继续运行
return TagSupport.EVAL_PAGE;
}
}
//代属性的标签
public class DateTag extends TagSupport {
private String pattern = "yyyy-MM-dd hh:mm:ss";
private Date date;
//必须要有Set方法,因为是属性可以设值
public void setPattern(String pattern) {
this.pattern = pattern;
}
public void setDate(Date date) {
this.date = date;
}
public int doEndTag() throws JspException {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
//如果没有就是当前时间
if(date==null){
date = new Date();
}
JspWriter out = pageContext.getOut();
try {
out.print(sdf.format(date));
} catch (IOException e) {
e.printStackTrace();
}
return TagSupport.EVAL_PAGE;
}
}
/**
* 循环输出
* @author Administrator
*
*/
public class LoopTag extends TagSupport {
private int times =0;
//Set方法设值
public void setTimes(int times) {
this.times = times;
}
public int doStartTag() throws JspException {
//表示定制标记里面有所包括的JSP页面
return TagSupport.EVAL_BODY_INCLUDE;
}
public int doAfterBody() throws JspException {
if(times>0){
times--;
//表示双从标签开始输入
return TagSupport.EVAL_BODY_AGAIN;
}
//表示结束,忽略标签内部的内容
return TagSupport.SKIP_BODY;
}
}
配置文件
Xml代码
Xml代码
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>util</short-name>
<uri>http://langhua.com/taglib/util</uri>
<tag>
<name>timer</name>
<tag-class>com.langhua.tagsupport.LangHuaTag</tag-class>
<body-content>JSP</body-content>
<!-- JSP,empty表示能能包函内容的,scriptless,tagdependent -->
</tag>
<tag>
<name>date</name>
<tag-class>com.langhua.tagsupport.DateTag</tag-class>
<body-content>empty</body-content>
<!-- JSP,empty表示不能包函内容的,scriptless,tagdependent -->
<attribute>
<!-- 标签名 -->
<name>time</name>
<!-- 是否为可选属性 -->
<required>false</required>
<!-- 是否接受JSP表达示计算结果 -->
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>pattern</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
<tag>
<name>loop</name>
<tag-class>com.langhua.tagsupport.LoopTag</tag-class>
<body-content>JSP</body-content>
<!-- JSP,empty表示不能包函内容的,scriptless,tagdependent -->
<attribute>
<!-- 标签名 -->
<name>times</name>
<!-- 是否为可选属性 -->
<required>true</required>
<!-- 是否接受JSP表达示计算结果 -->
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
JSP页面
Html代码
Html代码
<%@ taglib prefix="util" uri="http://langhua.com/taglib/util"%>
<util:timer></util:timer>
<util:loop times="3">
<util:date pattern="yyyy-MM-dd" /><br/>
</util:loop>
<%@ taglib prefix="util" uri="http://langhua.com/taglib/util"%>
<util:timer></util:timer>
<util:loop times="3">
<util:date pattern="yyyy-MM-dd" /><br/>
</util:loop>
TagSupport的流程图
SKIP_BODY 表示不用处理标签体,直接调用doEndTag()方法。
SKIP_PAGE 忽略标签后面的JSP内容。
EVAL_PAGE 处理标签后,继续处理JSP后面的内容。
EVAL_BODY_BUFFERED 表示需要处理标签体。
EVAL_BODY_INCLUDE 表示需要处理标签体,但绕过setBodyContent()和doInitBody()方法
EVAL_BODY_AGAIN 对标签体循环处理。
自定义标签采用Default Adapter模式(缺省适配模式)
Java代码
Java代码
//最简单的标签
public class LangHuaTag extends TagSupport {
private long startTime;
private long endTime;
public int doStartTag() throws JspException {
startTime = System.currentTimeMillis();
//表示定制标记里面有所包括的JSP页面
return TagSupport.EVAL_BODY_INCLUDE;
}
public int doEndTag() throws JspException {
endTime = System.currentTimeMillis();
long elapsed = endTime - startTime;
try {
JspWriter out = pageContext.getOut();
out.println("runtime is "+ elapsed);
} catch (IOException e) {
e.printStackTrace();
}
//表示JSP页面继续运行
return TagSupport.EVAL_PAGE;
}
}
//代属性的标签
public class DateTag extends TagSupport {
private String pattern = "yyyy-MM-dd hh:mm:ss";
private Date date;
//必须要有Set方法,因为是属性可以设值
public void setPattern(String pattern) {
this.pattern = pattern;
}
public void setDate(Date date) {
this.date = date;
}
public int doEndTag() throws JspException {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
//如果没有就是当前时间
if(date==null){
date = new Date();
}
JspWriter out = pageContext.getOut();
try {
out.print(sdf.format(date));
} catch (IOException e) {
e.printStackTrace();
}
return TagSupport.EVAL_PAGE;
}
}
/**
* 循环输出
* @author Administrator
*
*/
public class LoopTag extends TagSupport {
private int times =0;
//Set方法设值
public void setTimes(int times) {
this.times = times;
}
public int doStartTag() throws JspException {
//表示定制标记里面有所包括的JSP页面
return TagSupport.EVAL_BODY_INCLUDE;
}
public int doAfterBody() throws JspException {
if(times>0){
times--;
//表示双从标签开始输入
return TagSupport.EVAL_BODY_AGAIN;
}
//表示结束,忽略标签内部的内容
return TagSupport.SKIP_BODY;
}
}
配置文件
Xml代码
Xml代码
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>util</short-name>
<uri>http://langhua.com/taglib/util</uri>
<tag>
<name>timer</name>
<tag-class>com.langhua.tagsupport.LangHuaTag</tag-class>
<body-content>JSP</body-content>
<!-- JSP,empty表示能能包函内容的,scriptless,tagdependent -->
</tag>
<tag>
<name>date</name>
<tag-class>com.langhua.tagsupport.DateTag</tag-class>
<body-content>empty</body-content>
<!-- JSP,empty表示不能包函内容的,scriptless,tagdependent -->
<attribute>
<!-- 标签名 -->
<name>time</name>
<!-- 是否为可选属性 -->
<required>false</required>
<!-- 是否接受JSP表达示计算结果 -->
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>pattern</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
<tag>
<name>loop</name>
<tag-class>com.langhua.tagsupport.LoopTag</tag-class>
<body-content>JSP</body-content>
<!-- JSP,empty表示不能包函内容的,scriptless,tagdependent -->
<attribute>
<!-- 标签名 -->
<name>times</name>
<!-- 是否为可选属性 -->
<required>true</required>
<!-- 是否接受JSP表达示计算结果 -->
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
JSP页面
Html代码
Html代码
<%@ taglib prefix="util" uri="http://langhua.com/taglib/util"%>
<util:timer></util:timer>
<util:loop times="3">
<util:date pattern="yyyy-MM-dd" /><br/>
</util:loop>
<%@ taglib prefix="util" uri="http://langhua.com/taglib/util"%>
<util:timer></util:timer>
<util:loop times="3">
<util:date pattern="yyyy-MM-dd" /><br/>
</util:loop>
TagSupport的流程图
SKIP_BODY 表示不用处理标签体,直接调用doEndTag()方法。
SKIP_PAGE 忽略标签后面的JSP内容。
EVAL_PAGE 处理标签后,继续处理JSP后面的内容。
EVAL_BODY_BUFFERED 表示需要处理标签体。
EVAL_BODY_INCLUDE 表示需要处理标签体,但绕过setBodyContent()和doInitBody()方法
EVAL_BODY_AGAIN 对标签体循环处理。
相关文章推荐
- jsp自定义标签--tagSupport和bodyTagSupport
- 由浅到深详细讲解JSP自定义标签
- jsp 自定义标签
- jsp使用自定义标签taglib分页系列——TableBase.java
- 创建动态菜单的JSP自定义标签(A Custom JSP Tag Library for Dynamic Menus)
- JSP自定义标签简介
- Jsp---自定义标签
- JSP自定义标签(包含属性)
- Java程序员从笨鸟到菜鸟之(二十)jsp自定义标签
- 利用 JSP 2 提供的 SimpleTagSupport 开发自定义标签
- JSP自定义标签(三) 多选控件(2)
- jsp自定义标签tag EL函数
- 浅谈JSP自定义标签实现过程
- JSP自定义标签 实例加讲解
- JSP自定义标签(1):一个简单的标签
- JSP自定义标签(一):自定义JSP简单标签
- jsp自定义标签、EL自定义方法
- JSP自定义标签_自定义标签的扩展功能总结
- JSP自定义标签开发(一)—— HelloWorld 采用Tag接口实现开发
- jsp使用自定义标签taglib分页系列——SearchForm - cao_david的专栏 - CSDNBlog