如何編寫jstl自定義標籤(示例:自定義jstl Long型時間轉爲date型)

趁着如今睡不着抓緊 把原來想寫的都寫了吧、、 咳咳 java

寫jsp不可避免的會用到jstl,由於這個公司也沒怎麼用過velocity等模板,因此jstl就相對來講是比較簡單的寫法了。 web

頁面有須要時間格式化的東西,看到代碼中,以前他們作的是一個model類從索引或者緩存中獲取到數據後有一個時間格式 緩存

爲long型, 而頁面上顯然是不可能以long型展現給用戶的,以前的寫法是獲取model以後寫個for循環把這個long型轉成想要展現的類型 jsp

存入list,而後再頁面跟隨這這個model進行獲取,顯然這種作法非常不可取的,一旦某個環節出了問題,小點說就竄行了, ui

至於大問題、、咳咳 我就說不許了。。。。 this

jstl有不少時間格式化的標籤,但貌似只是支持date型的,更多的我也沒去細搜,不過貌似就是不支持long型,其實long型對咱們也是頗有 spa

用的,好比說按時間排序、、很方即是不是、 在jstl裏就比較麻煩了,好在jstl能夠寫自定義標籤,寫這篇文章的目的其實也不僅是介紹這個 code

long型時間格式化問題,主要仍是怎麼寫自定義標籤、、咳咳很少說廢話了直接上代碼吧 orm

package com.controller.touch;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

/**
 * 用於頁面jstl時間格式化
 * @author jiangnan
 *
 */
public class JSTLDateUtils extends TagSupport {

    /**
     * 
     */
    private static final long serialVersionUID = -3354015192721342312L;
    private String value;
    public void setValue(String value) {
        this.value = value;
    }
        private String parttern;
    public void setValue(String parttern ) {
        this.value =  parttern ;
    }
    public int doStartTag() throws JspException{
        String vv = String.valueOf(value);  
        long time = Long.valueOf(vv);  
        Calendar c = Calendar.getInstance();  
        c.setTimeInMillis(time);  
        SimpleDateFormat dateformat =new SimpleDateFormat(parttern);  
        String s = dateformat.format(c.getTime());  
        try {  
            pageContext.getOut().write(s);  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        return super.doStartTag();
    }
    public static void main(String[] args) {
        long a =1332744845078l;
         long time = Long.valueOf(a);  
            Calendar c = Calendar.getInstance();  
            c.setTimeInMillis(time);  
            SimpleDateFormat dateformat =new SimpleDateFormat("MM-dd HH:mm");  
            String s = dateformat.format(c.getTime());  
        System.out.println(s);
    }
}




在web.xml 中要添加這些東西: 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就能夠啦

相關文章
相關標籤/搜索