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()->执行下面的网页

应用案例:

借助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. * @author LiDuanqiang
  9. *
  10. */
  11. @SuppressWarnings("serial")
  12. public class DateConvert extends TagSupport{
  13. private String longTime;
  14. @Override
  15. public int doStartTag() throws JspException {
  16. long l = 0l;
  17. if (longTime!=null&&!longTime.equals("")) {
  18. l = Long.parseLong(longTime);
  19. }
  20. Date date = new Date(l);
  21. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  22. String targetTime = format.format(date);
  23. try {
  24. super.pageContext.getOut().write(targetTime);
  25. } catch (IOException e) {
  26. e.printStackTrace();
  27. }
  28. return super.doStartTag();
  29. }
  30. //setter and getter
  31. public void setLongTime(String longTime) {
  32. this.longTime = longTime;
  33. }
  34. }

第三步,可在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. <tag>
  10. <name>longStr</name>
  11. <tag-class>org.up.snapshot.utils.DateConvert</tag-class>
  12. <body-content>JSP</body-content>
  13. <attribute>
  14. <name>longTime</name>
  15. <required>true</required>
  16. <rtexprvalue>true</rtexprvalue>
  17. </attribute>
  18. </tag>
  19. </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自定义标签相关推荐

  1. html模板(base标签,meta标签,禁用浏览器缓存)+JSP自定义标签荔枝

    [1]html模板 <html> <head><!-- base标签表示uri相对路径的基准路径 --><base href="http://loc ...

  2. [JSP]自定义标签库taglib

    自定义标签的步骤 自定义标签的步骤大概有三步: 1.继承javax.servlet.jsp.tagext.*下提供的几个标签类,如Tag.TagSupport.BodyTagSupport.Simpl ...

  3. java 自定义taglib_[JSP]自定义标签库taglib

    自定义标签的步骤大概有三步: 1.继承javax.servlet.jsp.tagext.*下提供的几个标签类,如Tag.TagSupport.BodyTagSupport.SimpleTagSuppo ...

  4. 自定义标签JSTL标签库详解

     自定义标签是JavaWeb的一部分非常重要的核心功能,我们之前就说过,JSP规范说的很清楚,就是Jsp页面中禁止编写一行Java代码,就是最好不要有Java脚本片段,下面就来看一下自定义标签的简 ...

  5. 自定义标签 TagSupport

    本人写的第一个web项目设计权限时,用的就是自定义标签,觉得用自定义标签来设计一个小的web程序权限,非常的简单,虽然有很久没用了,但我觉得有必要记记,万一以后用的着呢! 标签处理 priveTag. ...

  6. 自定义标签(TagSupport )

    定义最简单的标签     自定义标签采用Default Adapter模式(缺省适配模式) Java代码 1 //最简单的标签 2 public class LangHuaTag extends Ta ...

  7. java 自定义标签继承_JSP继承TagSupport如何开发带属性的自定义标签

    JSP继承TagSupport如何开发带属性的自定义标签 Taglib的无属性自定义标签不能满足我们,如果可以在标签从加入我们需要的属性那么这样的话会更发方便了,可以根据我需要的什么参数直接传到指定的 ...

  8. jsp自定义标签 TagSupport

    定义最简单的标签     自定义标签采用Default Adapter模式(缺省适配模式) Java代码 Java代码   //最简单的标签 public class LangHuaTag exten ...

  9. 自定义标签TagSupport

    1.导入jar 包 jsp-api-2.2-sources.jar 2.编写功能类 public class TagTest extends TagSupport{ private static fi ...

最新文章

  1. 云曦服务器,云曦南羡最新章节_云曦南羡全本小说
  2. php异步方案,PHP的异步实现方式
  3. 标准访问控制列表配置(51cto: 实验 34)
  4. 2、ALTER TABLE:修改数据表
  5. init与clinit的区别
  6. 【带流程眼镜的思考】消除“等待”就是提高效率
  7. java卡安全域_java – 在安全管理器下解析许多域后,程序内存不足?
  8. 详解CSS三大特性之层叠性、继承性和重要性——Web前端系列学习笔记
  9. poj2109 Power of Cryptography(数学题)
  10. CGPA的完整形式是什么?
  11. cocos2dx打飞机项目笔记三:HeroLayer类和坐标系
  12. 【Computer Organization笔记13】指令流水中的结构冲突和数据冲突
  13. 锐捷客户端了解网络架构
  14. 算法速学速用大辞典 pdf_随机梯度蒙特卡洛算法-重要性采样
  15. PID控制算法的c语言实现 附录2 直流电机PWM调速系统中控制电压非线性研究
  16. Java 堆栈-用数组实现堆栈
  17. jack插头_连接器,插孔,插头和端口有什么区别?
  18. AR室内导航-Three.js
  19. JavaSE Map集合 HashMap和Hashtable的区别 Collections(集合工具类) 集合练习 模拟斗地主(洗牌,发牌,看牌)
  20. 李开复创办创新工场的发言稿及访谈

热门文章

  1. 外循环与内循环的分析演示
  2. Mac虚拟机安装win7教程
  3. 就拿胖子说事:成年男性的标准体重公式为:标准体重(kg)=身高(cm)-100,超标准20%为超重,比标准体重轻20%为超清。输出标准体重,
  4. Windows如何用sha1验证文件完整性
  5. 2DToolkit官方文档中文版打地鼠教程
  6. OPPO大数据计算集群资源调度架构演进
  7. JavaScript监听事件
  8. LPWA通信费仅需传统10% 成推动物联网重要关键
  9. latex表格 分行 跨行跨列
  10. 一个AS3 socket解码设计的错误思路