使用TagSupport自定义标签

doStartTag(),doEndTag()

TagSupport的学习

1 TagSupportBodyTagSupport的区别

TagSupportBodyTagSupport的区别主要是标签处理类是否需要与标签体交互,如果不需要交互的就用TagSupport,否则如果不需要交互就用BodyTagSupport

交互就是标签处理类是否要读取标签体的内容和改变标签体返回的内容。

TagSupport实现的标签,都可以用BodyTagSupport来实现,因为BodyTagSupport继承了TagSupport

2 doStartTag(),doEndTag()

doStartTag()方法是遇到标签开始时会呼叫的方法,其合法的返回值是EVAL_BODY_INCLUDESKIP_BODY,前者表示将显示标签间的文字,后者表示不显示标签间的文字;doEndTag()方法是在遇到标签结束时呼叫的方法,其合法的返回值是EVAL_PAGESKIP_PAGE,前者表示处理完标签后继续执行以下的JSP网页,后者是表示不处理接下来的JSP网页

doAfterBody(),这个方法是在显示完标签间文字之后呼叫的,其返回值有EVAL_BODY_AGAINSKIP_BODY,前者会再显示一次标签间的文字,后者则继续执行标签处理的下一步。

预定的处理顺序是:doStartTag()返回SKIP_BODY,doAfterBodyTag()返回SKIP_BODY,doEndTag()返回EVAL_PAGE.

如果继承了TagSupport之后,如果没有改写任何的方法,标签处理的执行顺序是:

doStartTag() ->不显示文字->doEndTag()->执行接下来的网页

如果您改写了doStartTag(),则必须指定返回值,如果指定了EVAL_BODY_INCLUDE,则执行顺序是

doStartTag()->显示文字->doAfterBodyTag()->doEndTag()->执行下面的网页


应用案例:

借助TagSupport 实现自定义标签

自定义标签 

首先,得导入jar包  jsp-api-2.2-sources.jar

(如果你的项目中使用了maven可以在pom.xml文件中添加

Xml代码   收藏代码
  1. <dependency>  
  2. <groupId>javax.servlet.jsp</groupId>  
  3. <artifactId>jsp-api</artifactId>  
  4. <version>2.2</version>  
  5. <scope>provided</scope>  
  6. </dependency>  

 jar文件引用。

)

第二步,定义一个用来实现标签功能的java类,例如:DateConvert.java

Java代码   收藏代码
  1. import java.io.IOException;  
  2. import java.text.SimpleDateFormat;  
  3. import java.util.Date;  
  4. import javax.servlet.jsp.JspException;  
  5. import javax.servlet.jsp.tagext.TagSupport;  
  6.   
  7. /** 
  8.  * 数据类型转换 
  9.  * @author LiDuanqiang 
  10.  * 
  11.  */  
  12. @SuppressWarnings("serial")  
  13. public class DateConvert extends TagSupport{  
  14.     private String longTime;  
  15.       
  16.     @Override  
  17.     public int doStartTag() throws JspException {  
  18.         long l = 0l;  
  19.         if (longTime!=null&&!longTime.equals("")) {  
  20.             l = Long.parseLong(longTime);  
  21.         }  
  22.         Date date = new Date(l);  
  23.         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  24.         String targetTime = format.format(date);  
  25.         try {  
  26.             super.pageContext.getOut().write(targetTime);  
  27.         } catch (IOException e) {  
  28.             e.printStackTrace();  
  29.         }  
  30.         return super.doStartTag();  
  31.     }  
  32.       
  33.     //setter and getter  
  34.     public void setLongTime(String longTime) {  
  35.         this.longTime = longTime;  
  36.     }  
  37.       
  38. }  

 第三步,可在WEB-INF目录下定义一个*.tld文件,例如dateConvert.tld:

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"  
  3.                         "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">  
  4. <taglib>  
  5.  <tlib-version>1.0</tlib-version>  
  6.  <jsp-version>1.2</jsp-version>  
  7.  <short-name>ct</short-name>  
  8.  <uri>/dateConvert</uri>  
  9.    
  10.  <tag>  
  11.     <name>longStr</name>  
  12.     <tag-class>org.up.snapshot.utils.DateConvert</tag-class>  
  13.     <body-content>JSP</body-content>  
  14.     <attribute>  
  15.         <name>longTime</name>  
  16.         <required>true</required>  
  17.         <rtexprvalue>true</rtexprvalue>  
  18.     </attribute>  
  19.  </tag>  
  20. </taglib>  

 第四步,在web.xml文件中引用你的*.tld文件:

Xml代码   收藏代码
  1. <taglib>  
  2.         <taglib-uri>/dateConvert</taglib-uri>  
  3.         <taglib-location>dateConvert.tld</taglib-location>  
  4.     </taglib>  
  5. <welcome-file-list>  
  6.         <welcome-file>dateConvert.jsp</welcome-file>  
  7.     </welcome-file-list>  

 第五步,在你的页面引入自定义标签库进行使用,例如:dateConvert.jsp:

Jsp代码   收藏代码
  1. <%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%>  
  2. <%@ taglib uri="/dateConvert" prefix="ct"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
  7. <title>数据类型转换</title>  
  8. </head>  
  9. <body>  
  10. <ct:longStr longTime="1314842011312"></ct:longStr>  
  11. </body>  
  12. </html>  
 

 以上代码实现的是将长整型的数据通过自定义标签转换成指定日期格式进行输出。当然,大家可以定义功能更加强大的java类来实现你的标签功能。

 



你可能感兴趣的:(使用TagSupport自定义标签)