如何編寫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就可以啦


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM