doStartTag(),doEndTag()
TagSupport的学习
1 TagSupport与BodyTagSupport的区别
TagSupport与BodyTagSupport的区别主要是标签处理类是否需要与标签体交互,如果不需要交互的就用TagSupport,否则如果不需要交互就用BodyTagSupport。
交互就是标签处理类是否要读取标签体的内容和改变标签体返回的内容。
用TagSupport实现的标签,都可以用BodyTagSupport来实现,因为BodyTagSupport继承了TagSupport。
2 doStartTag(),doEndTag()
doStartTag()方法是遇到标签开始时会呼叫的方法,其合法的返回值是EVAL_BODY_INCLUDE与SKIP_BODY,前者表示将显示标签间的文字,后者表示不显示标签间的文字;doEndTag()方法是在遇到标签结束时呼叫的方法,其合法的返回值是EVAL_PAGE与SKIP_PAGE,前者表示处理完标签后继续执行以下的JSP网页,后者是表示不处理接下来的JSP网页
doAfterBody(),这个方法是在显示完标签间文字之后呼叫的,其返回值有EVAL_BODY_AGAIN与SKIP_BODY,前者会再显示一次标签间的文字,后者则继续执行标签处理的下一步。
预定的处理顺序是:doStartTag()返回SKIP_BODY,doAfterBodyTag()返回SKIP_BODY,doEndTag()返回EVAL_PAGE.
如果继承了TagSupport之后,如果没有改写任何的方法,标签处理的执行顺序是:
doStartTag() ->不显示文字->doEndTag()->执行接下来的网页
如果您改写了doStartTag(),则必须指定返回值,如果指定了EVAL_BODY_INCLUDE,则执行顺序是
doStartTag()->显示文字->doAfterBodyTag()->doEndTag()->执行下面的网页
应用案例:
首先,得导入jar包 jsp-api-2.2-sources.jar
(如果你的项目中使用了maven可以在pom.xml文件中添加
- <dependency>
- <groupId>javax.servlet.jsp</groupId>
- <artifactId>jsp-api</artifactId>
- <version>2.2</version>
- <scope>provided</scope>
- </dependency>
jar文件引用。
)
第二步,定义一个用来实现标签功能的java类,例如:DateConvert.java
- import java.io.IOException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import javax.servlet.jsp.JspException;
- import javax.servlet.jsp.tagext.TagSupport;
- /**
- * 数据类型转换
- * @author LiDuanqiang
- *
- */
- @SuppressWarnings(“serial”)
- public class DateConvert extends TagSupport{
- private String longTime;
- @Override
- public int doStartTag() throws JspException {
- long l = 0l;
- if (longTime!=null&&!longTime.equals(“”)) {
- l = Long.parseLong(longTime);
- }
- Date date = new Date(l);
- SimpleDateFormat format = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
- String targetTime = format.format(date);
- try {
- super.pageContext.getOut().write(targetTime);
- } catch (IOException e) {
- e.printStackTrace();
- }
- return super.doStartTag();
- }
- //setter and getter
- public void setLongTime(String longTime) {
- this.longTime = longTime;
- }
- }
第三步,可在WEB-INF目录下定义一个*.tld文件,例如dateConvert.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.0</tlib-version>
- <jsp-version>1.2</jsp-version>
- <short-name>ct</short-name>
- <uri>/dateConvert</uri>
- <tag>
- <name>longStr</name>
- <tag-class>org.up.snapshot.utils.DateConvert</tag-class>
- <body-content>JSP</body-content>
- <attribute>
- <name>longTime</name>
- <required>true</required>
- <rtexprvalue>true</rtexprvalue>
- </attribute>
- </tag>
- </taglib>
第四步,在web.xml文件中引用你的*.tld文件:
- <taglib>
- <taglib-uri>/dateConvert</taglib-uri>
- <taglib-location>dateConvert.tld</taglib-location>
- </taglib>
- <welcome-file-list>
- <welcome-file>dateConvert.jsp</welcome-file>
- </welcome-file-list>
第五步,在你的页面引入自定义标签库进行使用,例如:dateConvert.jsp:
- <%@ page language=“java” contentType=“text/html; charset=utf-8” pageEncoding=“utf-8”%>
- <%@ taglib uri=“/dateConvert” prefix=“ct”%>
- <!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
- <html>
- <head>
- <meta http-equiv=“Content-Type” content=“text/html; charset=utf-8”>
- <title>数据类型转换</title>
- </head>
- <body>
- <ct:longStr longTime=“1314842011312”></ct:longStr>
- </body>
- </html>
以上代码实现的是将长整型的数据通过自定义标签转换成指定日期格式进行输出。当然,大家可以定义功能更加强大的java类来实现你的标签功能。
今天的文章使用TagSupport自定义标签分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/25726.html