自定义标签

自定义标签(TagSupport )

  • 定义最简单的标签    

自定义标签采用Default Adapter模式(缺省适配模式) 

Java代码

Java代码   收藏代码
  1. //最简单的标签       
  2. public class LangHuaTag extends TagSupport {       
  3.     private long startTime;       
  4.     private long endTime;       
  5.            
  6.     public int doStartTag() throws JspException {       
  7.         startTime = System.currentTimeMillis();       
  8.         //表示定制标记里面有所包括的JSP页面       
  9.         return TagSupport.EVAL_BODY_INCLUDE;       
  10.     }       
  11.     public int doEndTag() throws JspException {       
  12.         endTime = System.currentTimeMillis();       
  13.         long elapsed = endTime - startTime;            
  14.         try {       
  15.             JspWriter out = pageContext.getOut();       
  16.             out.println("runtime is "+ elapsed);       
  17.         } catch (IOException e) {       
  18.             e.printStackTrace();       
  19.         }       
  20.         //表示JSP页面继续运行       
  21.         return TagSupport.EVAL_PAGE;       
  22.     }       
  23.            
  24. }       
  25. //代属性的标签       
  26. public class DateTag extends TagSupport {       
  27.     private String pattern = "yyyy-MM-dd hh:mm:ss";       
  28.     private Date date;       
  29.     //必须要有Set方法,因为是属性可以设值       
  30.     public void setPattern(String pattern) {       
  31.         this.pattern = pattern;       
  32.     }       
  33.            
  34.     public void setDate(Date date) {       
  35.         this.date = date;       
  36.     }       
  37.       
  38.     public int doEndTag() throws JspException {       
  39.         SimpleDateFormat sdf = new SimpleDateFormat(pattern);       
  40.         //如果没有就是当前时间       
  41.         if(date==null){       
  42.             date = new Date();       
  43.         }              
  44.         JspWriter out = pageContext.getOut();       
  45.         try {       
  46.             out.print(sdf.format(date));       
  47.         } catch (IOException e) {       
  48.             e.printStackTrace();       
  49.         }       
  50.         return TagSupport.EVAL_PAGE;       
  51.     }       
  52. }       
  53.       
  54. /**    
  55.  * 循环输出    
  56.  * @author Administrator    
  57.  *    
  58.  */      
  59. public class LoopTag extends TagSupport {       
  60.     private int times =0;       
  61.     //Set方法设值       
  62.     public void setTimes(int times) {       
  63.         this.times = times;       
  64.     }       
  65.            
  66.     public int doStartTag() throws JspException {       
  67.         //表示定制标记里面有所包括的JSP页面       
  68.         return TagSupport.EVAL_BODY_INCLUDE;       
  69.     }       
  70.            
  71.     public int doAfterBody() throws JspException {       
  72.         if(times>0){       
  73.             times--;       
  74.             //表示双从标签开始输入       
  75.             return TagSupport.EVAL_BODY_AGAIN;       
  76.         }          
  77.         //表示结束,忽略标签内部的内容       
  78.         return TagSupport.SKIP_BODY;       
  79.     }       
  80.            
  81. }      

配置文件    
Xml代码

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>      
  2. <taglib xmlns="http://java.sun.com/xml/ns/j2ee"      
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"      
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"      
  5.     version="2.0">      
  6.     <tlib-version>1.0</tlib-version>      
  7.     <short-name>util</short-name>      
  8.     <uri>http://langhua.com/taglib/util</uri>      
  9.     <tag>      
  10.         <name>timer</name>      
  11.         <tag-class>com.langhua.tagsupport.LangHuaTag</tag-class>      
  12.         <body-content>JSP</body-content>      
  13.         <!-- JSP,empty表示能能包函内容的,scriptless,tagdependent -->      
  14.     </tag>      
  15.            
  16.     <tag>      
  17.         <name>date</name>      
  18.         <tag-class>com.langhua.tagsupport.DateTag</tag-class>      
  19.         <body-content>empty</body-content>             
  20.         <!-- JSP,empty表示不能包函内容的,scriptless,tagdependent -->      
  21.         <attribute>      
  22.             <!-- 标签名 -->      
  23.             <name>time</name>      
  24.             <!-- 是否为可选属性 -->      
  25.             <required>false</required>      
  26.             <!-- 是否接受JSP表达示计算结果 -->      
  27.             <rtexprvalue>true</rtexprvalue>      
  28.         </attribute>      
  29.         <attribute>      
  30.             <name>pattern</name>      
  31.             <required>true</required>      
  32.             <rtexprvalue>false</rtexprvalue>      
  33.         </attribute>      
  34.     </tag>      
  35.            
  36.     <tag>      
  37.         <name>loop</name>      
  38.         <tag-class>com.langhua.tagsupport.LoopTag</tag-class>      
  39.         <body-content>JSP</body-content>               
  40.         <!-- JSP,empty表示不能包函内容的,scriptless,tagdependent -->      
  41.         <attribute>      
  42.             <!-- 标签名 -->      
  43.             <name>times</name>      
  44.             <!-- 是否为可选属性 -->      
  45.             <required>true</required>      
  46.             <!-- 是否接受JSP表达示计算结果 -->      
  47.             <rtexprvalue>true</rtexprvalue>      
  48.         </attribute>             
  49.     </tag>      
  50. </taglib>      

 

JSP页面    
Html代码  

Html代码   收藏代码
  1. <%@ taglib prefix="util" uri="http://langhua.com/taglib/util"%>      
  2.       
  3. <util:timer></util:timer>      
  4. <util:loop times="3">      
  5.     <util:date pattern="yyyy-MM-dd" /><br/>      
  6. </util:loop>      
  7.     
  8. <%@ taglib prefix="util" uri="http://langhua.com/taglib/util"%>    
  9.     
  10. <util:timer></util:timer>    
  11. <util:loop times="3">    
  12.     <util:date pattern="yyyy-MM-dd" /><br/>    
  13. </util:loop>  

 

TagSupport的流程图

          SKIP_BODY 表示不用处理标签体,直接调用doEndTag()方法。
       
        SKIP_PAGE 忽略标签后面的JSP内容。
       
      EVAL_PAGE 处理标签后,继续处理JSP后面的内容。
       
      EVAL_BODY_BUFFERED 表示需要处理标签体。
       
      EVAL_BODY_INCLUDE 表示需要处理标签体,但绕过setBodyContent()和doInitBody()方法
       
      EVAL_BODY_AGAIN 对标签体循环处理。

      • 0
        点赞
      • 0
        收藏
        觉得还不错? 一键收藏
      • 0
        评论

      “相关推荐”对你有帮助么?

      • 非常没帮助
      • 没帮助
      • 一般
      • 有帮助
      • 非常有帮助
      提交
      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

      当前余额3.43前往充值 >
      需支付:10.00
      成就一亿技术人!
      领取后你会自动成为博主和红包主的粉丝 规则
      hope_wisdom
      发出的红包
      实付
      使用余额支付
      点击重新获取
      扫码支付
      钱包余额 0

      抵扣说明:

      1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
      2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

      余额充值