iT邦幫忙

DAY 22
3

C# Web 開發 跳到 Java Web開發系列 第 19

[JSTL] fmt 標籤介紹

  • 分享至 

  • xImage
  •  

上一篇看了jstl裡面的基本標籤core,這一篇我們來看jstl另外一個標籤就是fmt全稱為format。
(和我部落格同時發佈:http://www.dotblogs.com.tw/alantsai/archive/2013/10/14/jstl-fmt.aspx
fmt 的概觀
fmt的全稱是format而因為通常來說我們都是用fmt當做他的prefix,因此稱之為fmt。

fmt的uri是:http://java.sun.com/jsp/jstl/fmt。

在fmt裡面的標籤大多屬於設定格式有關。接下來我們會介紹fmt幾個用法。

fmt:requestEncoding
這個只有一個value attribute用來設定這個request所使用的encoding。這個方法和request.setCharacterEncoding()是一樣的。

日期格式輸出
通常不同地區所輸出時間的排列方式都不一樣,因此有兩個fmt標籤是來做這個的。

fmt:formatDate
這個是接受一個java.util.Date格式的variable,然後轉成你想顯示的格式字串出來。和java裡面DateFormate的formate()類似。

這個標籤有以下幾個attribute:

1.value - 要格式化的日期參數
2.type - 指定value屬於date、time還是both。
3.pattern - 日期格式。如果設定pattern那麼type就失效了。如果沒有設定pattern就用預設Locale裡面格式。pattern1所接受的格式和 java.text.DateFormat一樣。
4.dateStyle - 日期的格式。有short、medium、long和full。
5.timeStyle - 時間格式。和dateStyle一樣有4個可以選
6.timeZone - 時間所在的區域。
7.var - 格式化的內容輸出到var參數裡面
8.scope - var所處的位置

範例:

<jsp:useBean id="date" class="java.util.Date"></jsp:useBean>   <fmt:formatDate value="${date}" pattern="yyyy-MM-dd"/> 

上面的例子是取得了今天日期,然後以 年-月-日 方式輸出。

fmt:parseDate
和fmt:formatDate擁有一樣的Attribute,他們差異在於formateDate是把一個Date object轉成指定格式變成string。而fmt.parseDate是用string轉成Date。

和DateFormate的parse()一樣。

fmt:parseDate有多一個Attribute叫做parseLocale,作用是指定string要用那個國家的格式做parsing。

範例:

<fmt:parseDate var="parseDate" value="2013-10-14 10:00:00" pattern="yyyy-MM-dd HH:mm:ss" parseLocale="Asia/Taipei" />

<fmt:formatDate value="${parseDate}" timeZone="Asia/Tokyo" dateStyle="full" timeStyle="full" type="both"/> 

上面是用台北地區把string轉成date,然後在把date的時區轉成日本時區,因此輸出會是2013-10-14 11:00:00.

處理和數字有關的格式
在不同地區顯示數字方式也會不一樣。同時,如果有需要輸出貨幣,不同貨幣的符號也不一樣,這篇我們會介紹如何做到這些效果。

fmt:formatNumber
基本上這個和javatext.NumberFormat的format()方法一樣作用,它有以下幾個Attribute:

1.value - 要格式化的數字
2.type - value類型,有number、currency和percent
3.pattern - 數字格式。同javax.text.NumberFormat
4.currencyCode - ISO 4217貨幣代碼。例如USD是美元
5.currencySymbol - 要輸出的貨幣符號
6.groupingUsed - 值為boolean。看似否要增加","在第1000的單位。
7.maxIntergerDigits - 整數的最大值。超過截掉。
8.minIntergerDigits - 整數最小值,不夠補零。
9.maxFractionDigits - 小數點最大值,超過四捨五入
10.minFractionDigits - 小數點最小值,不夠補〇
11.var - 輸出到的參數名稱
12.scope - var的範圍
fmt:parseNumber
和fmt:formatNumber一樣,差別是從string轉成number。Attribute和fmt:formatNumber一樣,不過沒有currency和xxxIntergerDigits。

fmt:setLocale
上面提到的數字和日期的格式,如果直接輸出來用的格式是預設的Locale。所以如果需要一次全部改成特定國家的格式,我們可以使用setLocale來達到。

因此輸出內容的時候最好透過jstl的fmt對應而不是直接用EL。因為EL不會收到setLocale的影響。

下面的範例能夠輸出不同Locale對於日期的格式:

<%       
request.setAttribute("locales", Locale.getAvailableLocales()); 
%>  
<jsp:useBean id="date" class="java.util.Date"></jsp:useBean>  
 <table> 
<tr> 
<th>Locale</th>
<th>Language</th> 
<th>Date</th> 
</tr> 
<c:forEach var="locale" items="${locales }"> 
<fmt:setLocale value="${locale }"/> 
<tr> 
<td>${locale.displayName }</td> <td>${locale.displayLanguage }</td> <td><fmt:formatDate type="both" value="${date }" /> </td> 
</tr> 
</c:forEach> 
</table> 

有scope和variant Attribute。scope表示這個setLocale要影響多深。例如session就會影響這個使用者在這段時間的情況。variant則顯示目前環境。

通常我們可以透過request.getLocale()來取得使用者使用的locale,然後在呼叫setLocale。預設使用Server的locale來設定。

設置時區
剛剛setLocale的方式只會影響輸出的時間格式,但是不會影響值。

我們知道不同國家時區不同,因此可以設置不同時區來取得不同國家的時間顯示。

fmt:timeZone
這個標籤有個value attribute可以選擇要使用的timeZone。可以是地區,例如"Asia/Taipei"或者是以"GMT-/+{數字}"的方式。例如GMT-8

範例:

<jsp:useBean id="date" class="java.util.Date"></jsp:useBean>  
 <fmt:timeZone value="Asia/Tokyo">   
  <fmt:formatDate value="${date }" type="both"/>
 </fmt:timeZone> 

上面把目前時間用日本時區顯示(和台灣相比多加1個小時)。

fmt:setTimeZone
和fmt:timeZone一樣的attribute,差別是fmt:timeZone只會影響在他下面的子jstl標籤。而fmt:setTimeZone會依照scope attribute的定義來決定影響範圍。

結語
其實fmt裡面還有一個很重要的部份,就是在做多語系用的。不過由於篇幅的關係,和因為還沒有接觸到多語系,因此沒有包含。

fmt其實屬於兩個部份,一個是做多語系,一個是用來format數字、日期的格式。

希望大家對於如何用fmt來做多國語系有更加的瞭解。


上一篇
[JSTL] Core標籤介紹
下一篇
[JSTL] fn 方法庫
系列文
C# Web 開發 跳到 Java Web開發27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0

我要留言

立即登入留言