趁着現在睡不着抓緊 把原來想寫的都寫了吧、、 咳咳
寫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就可以啦