zoukankan      html  css  js  c++  java
  • 如何编写jstl自定义标签(示例:自定义jstl Long型时间转为date型)

    趁着现在睡不着抓紧 把原来想写的都写了吧、、 咳咳

    写jsp不可避免的会用到jstl,因为这个公司也没怎么用过velocity等模板,所以jstl就相对来说是比较简单的写法了。

    页面有需要时间格式化的东西,看到代码中,之前他们做的是一个model类从索引或者缓存中获取到数据后有一个时间格式

    为long型, 而页面上显然是不可能以long型展示给用户的,之前的写法是获取model之后写个for循环把这个long型转成想要展示的类型

    存入list,然后再页面跟随这这个model进行获取,显然这种做法很是不可取的,一旦某个环节出了问题,小点说就窜行了,

    至于大问题、、咳咳 我就说不准了。。。。

    jstl有很多时间格式化的标签,但貌似只是支持date型的,更多的我也没去细搜,不过貌似就是不支持long型,其实long型对我们也是很有

    用的,比如说按时间排序、、很方便是不是、 在jstl里就比较麻烦了,好在jstl可以写自定义标签,写这篇文章的目的其实也不只是介绍这个

    long型时间格式化问题,主要还是怎么写自定义标签、、咳咳不多说废话了直接上代码吧

     1 package com.controller.touch;
     2 
     3 import java.io.IOException;
     4 import java.text.SimpleDateFormat;
     5 import java.util.Calendar;
     6 
     7 import javax.servlet.jsp.JspException;
     8 import javax.servlet.jsp.tagext.TagSupport;
     9 
    10 /**
    11  * 用于页面jstl时间格式化
    12  * @author jiangnan
    13  *
    14  */
    15 public class JSTLDateUtils extends TagSupport {
    16 
    17     /**
    18      * 
    19      */
    20     private static final long serialVersionUID = -3354015192721342312L;
    21     private String value;
    22     public void setValue(String value) {
    23         this.value = value;
    24     }
    25         private String parttern;
    26     public void setValue(String parttern ) {
    27         this.value =  parttern ;
    28     }
    29     public int doStartTag() throws JspException{
    30         String vv = String.valueOf(value);  
    31         long time = Long.valueOf(vv);  
    32         Calendar c = Calendar.getInstance();  
    33         c.setTimeInMillis(time);  
    34         SimpleDateFormat dateformat =new SimpleDateFormat(parttern);  
    35         String s = dateformat.format(c.getTime());  
    36         try {  
    37             pageContext.getOut().write(s);  
    38         } catch (IOException e) {  
    39             e.printStackTrace();  
    40         }  
    41         return super.doStartTag();
    42     }
    43     public static void main(String[] args) {
    44         long a =1332744845078l;
    45          long time = Long.valueOf(a);  
    46             Calendar c = Calendar.getInstance();  
    47             c.setTimeInMillis(time);  
    48             SimpleDateFormat dateformat =new SimpleDateFormat("MM-dd HH:mm");  
    49             String s = dateformat.format(c.getTime());  
    50         System.out.println(s);
    51     }
    52 }

    在web.xml 中要添加这些东西:

    1 <!-- 自定义JSTL时间格式化 -->
    2     <jsp-config>
    3         <taglib>        
    4             <taglib-uri>/tags</taglib-uri>   
    5             <taglib-location>/WEB-INF/datetag.tld</taglib-location>            
    6         </taglib>   
    7     </jsp-config>

    datetag.tld则按下面书写

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <taglib>  
     3     <tlib-version>1.1</tlib-version>  
     4     <jsp-version>1.2</jsp-version>  
     5     <short-name>date</short-name>//这里说明一下,开始我也没加这个东西,但是发现resin疯狂的报错啊,后来才发现resin对tld文件做严格语法检查,所以一定要加上这个
     6     <tag>  
     7         <name>date</name>  
     8         <tag-class>com.controller.touch.JSTLDateUtils</tag-class>          
     9         <attribute>  
    10             <name>value</name>  
    11             <required>true</required>  
    12             <rtexprvalue>true</rtexprvalue>  
    13         </attribute>
    14 <attribute>  
    15             <name>parttern</name>  
    16             <required>true</required>  
    17             <rtexprvalue>true</rtexprvalue>  
    18         </attribute>    
    19     </tag>  
    20 </taglib>

    最后jsp中就可以使用如下标签进行写代码了

    <date:date value="${time}" pattern="yyyy-MM-dd HH:mm:ss"/>

    别忘记在页头加上引用 <%@ taglib uri="/tags" prefix="date"%> 否则会报错哦  

    如果想使用多个自定义的标签可以编写多个类,然后再tld中进行添加对用的tag就可以啦

  • 相关阅读:
    Django ListView实现分页
    redis-pipeline
    MRO
    进程状态
    ORM基本操作回顾
    协程回顾
    线程的回顾
    multiprocessing- 基于进程的并行性
    Fix Curl client hung issue
    Curl request 'Expect: 100-Continue' Issues and Risks
  • 原文地址:https://www.cnblogs.com/icoding/p/2581164.html
Copyright © 2011-2022 走看看