jsp fmt標籤詳解

詳見:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt326html

JSTL標籤提供了對國際化(I18N)的支持,它能夠根據發出請求的客戶端地域的不一樣來顯示不一樣的語言。同時還提供了格式化數據和日期的方法。實現這些功能須要I18N格式標籤庫(I18N-capable formation tags liberary)。引入該標籤庫的方法爲:java

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>git

I18N格式標籤庫提供了11個標籤,這些 標籤從功能上能夠劃分爲3類以下:web

(1)數字日期格式化。formatNumber標籤、formatData標籤、parseNumber標籤、parseDate標籤、timeZone標籤、setTimeZone標籤。瀏覽器

(2)讀取消息資源。bundle標籤、message標籤、setBundle標籤。session

(3)國際化。setlocale標籤、requestEncoding標籤。app

接下將詳細介紹這些標籤的功能和使用方式。jsp

9.3.1 數字日期格式化工具

數字日期格式化標籤共有6個,用來將數字或日期轉換成設定的格式。測試

1.<frm:formatNumber/>標籤

該標籤依據特定的區域將數字改變爲不一樣的格式來顯示。

【語法1】:

<frm:formatNumber value=」被格式化的數據」[type=」number|currency|percent」]

                                               [pattern=」pattern」]

                                               [currencyCode=」code」]

                                               [currencySymbol=」symbol」]

                                               [groupingUsed=」true|false」]

                                               [maxIntergerDigits=」maxDigits」]

                                               [minIntergerDigits=」minDigits」]

                                               [maxFractionDigits=」maxDigits」]

                                               [minFractionDigits=」minDigits」]

                                               [var=」name」]

                                               [scope=page|request|session|application]

/>

【語法2】: 

<frm:formatNumber [type=」number|currency|percent」]

                                               [pattern=」pattern」]

                                               [currencyCode=」code」]

                                               [currencySymbol=」symbol」]

                                               [groupingUsed=」true|false」]

                                               [maxIntergerDigits=」maxDigits」]

                                               [minIntergerDigits=」minDigits」]

                                               [maxFractionDigits=」maxDigits」]

                                               [minFractionDigits=」minDigits」]

                                               [var=」name」]

                                               [scope=page|request|session|application]

<fmt:formatNumber>標籤參數說明:

名稱

說明

EL

類型

必須

默認值

value

要格式化的數據

String

type

指定類型(單位、貨幣、百分比等)見表

String

number

pattern

格式化的數據樣式

String

currencyCode

貨幣單位代碼

String

cuttencySymbol

貨幣符號($、¥)

String

groupingUsed

是否對整數部分進行分組如(9,999)

boolean

true

maxIntergerDigits

整數部分最對顯示多少位數

int

minIntergerDigits

整數部分最少顯示多少位

int

maxFractionDigits

小數部分最多顯示多少位

int

minFractionDigits

小數部分最少顯示多少位

int

var

存儲格式化後的數據

String

scope

var的JSP範圍

String

page

Type屬性的類型應用:.

類型

說明

示例

number

數字格式

0.8

currency

當地貨幣

¥0.80

percent

百分比格式

80%

【示例代碼】:實現了對數字的格式化、貨幣的格式、貨幣的格式化。使用<frm:formatNumber>的各類屬性的設定。

<table border=1 cellpadding="0" cellspacing="0" align="center">

 <tr align="center">

<td width="100">類型 </td>

<td width="100">使用數據</td>

<td width="100">結果</td>

<td width="300">說明</td>

 </tr>

 <tr>

 <td>數字格式化</td><td>108.75</td>

 <td><fmt:formatNumber type="number" pattern="###.#">108.75</fmt:formatNumber></td>

 <td>使用pattern能夠定義顯示的樣式。本例設定爲###.#小數部分將使用四捨五入法。</td>

 </tr>

 <tr>

 <td>數字格式化</td><td>9557</td>

 <td><fmt:formatNumber type="number" pattern="#.####E0">9557</fmt:formatNumber></td>

 <td>使用科學計數法。</td> 

 </tr>

 <tr>

 <td>數字格式化</td><td>9557</td>

 <td><fmt:formatNumber type="number" >9557</fmt:formatNumber></td>

 </td>

 <td>使用默認分組。</td>

 </tr>

 <tr>

 <td>數字格式化</td><td>9557</td>

 <td><fmt:formatNumber type="number" groupingUsed="false" >9557</fmt:formatNumber></td>

 <td>不使用分組。</td>

 </tr>

 <tr>

 <td>數字格式化</td><td>9557</td>

 <td><fmt:formatNumber type="number" maxIntegerDigits="3">9557</fmt:formatNumber></td>

 <td>使用位數限定,根據指定的位數顯示,其餘數字忽略。例如:9不被顯示。</td>

 </tr>

 <tr>

 <td>百分比格式化</td><td>0.98</td>

 <td><fmt:formatNumber type="percent">0.98</fmt:formatNumber></td>

 <td>用百分比形式顯示一個數據。</td>

 </tr>

 <tr>

 <td>貨幣格式化</td><td>188.88</td>

 <td><fmt:formatNumber type="currency" >188.8</fmt:formatNumber></td>

<td>將一個數據轉化爲貨幣形式輸出。</td>

 </tr>

 <tr>

 <td>存儲數據</td><td>188.88</td>

 <td><fmt:formatNumber type="currency" var="money">188.8</fmt:formatNumber>

 <c:out value="${money}"></c:out>

 </td>

 <td>存儲的money的值爲${money} </td>

 </tr>

 </table>

 【代碼說明】:

(1)從應用角度能夠把屬性分爲三類:數字格式化、貨幣格式化、百分比格式化。使用type指定類型。

(2)應用於數字格式化的屬性有:partten屬性、maxIntegerDigits屬性、minIntegerDigits屬性、maxFractionDigits屬性和minFactionDigits屬性。其中partten屬性在設定格式化樣式時會比較準確如:四捨五入、科學計數法的使用。而使用maIntegerDirgits等屬性時,只把設定位數之外的數字捨去。

(3)貨幣格式化可使用數字格式化的全部屬性。若是有必要建議使用partten屬性。currencyCode屬性和currencySymbol只用於貨幣格式化。

(4)百分比格式化使用到的屬性爲type屬性、partten屬性,設定type屬性的類型爲percent便可。

(5)使用var屬性時,會將格式化後的值存在JSP的某個範圍內(一個String類型的字符串包括符號等)。<frm:forNumber>將再也不輸出格式化後的值可使用EL表達式輸出。

(6)通用屬性:type屬性、partten屬性、var屬性和scope屬性。

2.<frm:parseNumber>標籤

將格式化後的數字、貨幣、百分比都轉化爲數字類型。

【語法1】:

<fmt:parseNumber value="number" [type=」number|currency|percent」]

                                                        [pattern=」pattern」]

                                                        [parseLocale=」locale」]                       

                                                        [intergerOnly=」true|false」]

                                                        [scope=」page|request|session|application」]

/>

【語法2】:

<fmt:parseNumber [type=」number|currency|percent」]

                                                        [pattern=」pattern」]

                                                        [parseLocale=」locale」]

                                                        [intergerOnly=」true|false」]

                                                        [scope=」page|request|session|application」]

Number

</fmt:parseNumber>

<fmt:parseNumber>標籤參數說明:

名稱

說明

EL

類型

是否必須

默認值

value

被解析的字符串

String

type

指定單位(數字、貨幣、百分比)

String

number

pattern

格式樣式

String

parseLocale

用來替代默認區域的設定

String,

Java.util.

Locale

默認本地樣式

var

存儲已經格式化的數據

String

scope

var變量的做用域

String

page

<fmt:parseNumber>能夠看做是<fmt:formatNumber>的逆運算。相應的參數和類型的配置和使用<fmt:formatNumber>格式化時相同。

【示例代碼】:實現了從字符串中提取數據,並用合適的數據類型進行存儲(浮點性、整型等)。能夠對轉換後的數據進行加法運算。

 <fmt:formatNumber type="currency" var="money">188.8</fmt:formatNumber>

 <li>格式化前的數據爲:<c:out value="${money}"></c:out>

 <fmt:parseNumber var="money" type="currency">${money}</fmt:parseNumber>

 <li>格式化後的數據爲:<c:out value="${money}"></c:out>

 <li>能夠對格式化的後的數據進行運算: 

 <c:out value="${money+200}"></c:out>

 <li>對百分比進行格式化98%爲:

 <fmt:parseNumber type="percent">98%</fmt:parseNumber>

【代碼解析】:

(1)首先使用<fmt:formatNumber>將188.8轉換爲字符串¥188.8並在page範圍內存儲一個String類型的變量,變量名爲money。

(2)使用<fmt:parseNumber>將¥188.8轉化爲浮點型的數據188.8並賦值爲變量money,

則變量money轉變爲一個浮點型的值188.8,對188.8進行加運算。

(3)直接對一個百分比數98%進行轉化。

3.<fmt:formatDate>標籤

該標籤主要用來格式化日期和時間。

【語法】:

<fmt: formatDate value=」date」 [type=」time|date|both」]

                                     [pattern=」pattern」]

                                     [dateStyle=」default|short|medium|long|full」]

                                     [timeStyle=」default|short|medium|long|full」]

                                     [timeZone=」timeZone」]

                                     [var=」name」]

                                     [scope=」page|request|session|application」]

/>

<fmt:formatDate>標籤屬性說明:

屬性名

說明

EL

類型

必須

默認值

value

將要格式化的日期對象。

Java.util.Date

type

顯示的部分(日期、時間或者二者)。

String

date

partten

格式化的樣式。

String

dateStyle

設定日期的顯示方式。

String

default

timeStyle

設定時間的顯示方式。

String

default

timeZone

設定使用的時區。

String

當地所用時區

var

存儲已格式化的日期或時間。

String

scope

指定var存儲的JSP範圍。

String

type屬性參數說明:

參數名

說明

time

只顯示時間

date

只顯示時期

both

顯示日期和時間

【示例程序】:實現了對日期的格式化,使用了type、dateStyle、timeStyle等屬性。

<fmt:formatDate value="${date}"></fmt:formatDate><br>

<fmt:formatDate value="${date}" type="both"></fmt:formatDate><br>

<fmt:formatDate value="${date}" type="both" dateStyle="default"

 timeStyle="default"></fmt:formatDate><br>

   <fmt:formatDate value="${date}" type="both" dateStyle="short"

 timeStyle="short"></fmt:formatDate><br>

   <fmt:formatDate value="${date}" type="both" dateStyle="long"

 timeStyle="long"></fmt:formatDate><br>

   <fmt:formatDate value="${date}" type="both" dateStyle="full"

timeStyle="full"></fmt:formatDate><br>

   <fmt:formatDate value="${date}" type="both" dateStyle="full"

timeStyle="full"></fmt:formatDate><br>

   

【代碼解析】:

(1)首先經過配置JavaBean在頁面上實例化java.util.Date對象。實現代碼以下:

<jsp:useBean id="date" class="java.util.Date"></jsp:useBean>

(2)對日期對象進行格式化時${date}是一個日期對象,若是給value設的值爲String時程序會報錯。

(3)設置type爲both時,將顯示日期和時間,同時示例中依次改變dateStyle和timeStyle的值做爲比較。

4.<fmt:parseDate>標籤

<fmt:parseDate>標籤主要將字符串類型的時間或日期轉化爲時間或日期對象。

【語法1】:

<fmt:parseDate value=」date」 [type=」time|date|both」]

                                                        [pattern=」pattern」]

                                                        [parseLocale=」locale」]

                                                        [dateStyle=」default|short|medium|long|full」]

                                                        [timeStyle=」default|short|medium|long|full」]

                                                        [timeZone=」timezone」]

                                                        [var=」name」]

                                                        [scope=」page|request|session|application」]

/>

【語法2】:

<fmt:parseDate [type=」time|date|both」]

                                                        [pattern=」pattern」]

                                                        [parseLocale=」locale」]

                                                        [dateStyle=」default|short|medium|long|full」]

                                                        [timeStyle=」default|short|medium|long|full」]

                                                        [timeZone=」timezone」]

                                                        [var=」name」]

                                                        [scope=」page|request|session|application」]

Date

</fmt:parseDate>

<fmt:parseData>標籤屬性說明:

屬性名

說明

EL

類型

必須

默認值

value

將要格式化的日期時間

String

type

字符串的類型(日期、時間或所有)

EL

String

date

pattern

字符串使用的時間樣式

String

parseLocale

取代默認地區設定

String

默認地區

dateStyle

字符串使用的日期顯示方式

String

default

timeStyle

字符串使用的時間顯示格式

String

default

timeZone

使用的時區

String

當地區時

var

使用var定義的名字保存對象

String

scope

var的JSP範圍

String

page

【示例代碼】:實現瞭如下功能:首先,使用了<fmt:formatDate>把一個日期對象格式化成一個日期的字符串,並把該字符串以參數名爲a存儲page範圍內。其次,使用<fmt:parseDate>方法把a的值(字符串)格式化成一個Date並以參數名爲b存儲在page範圍內。最後,使用Java腳本證實生成的b爲對象。

<fmt:formatDate value="${date}" var="a" type="both"

dateStyle="full" timeStyle="full"></fmt:formatDate>

<fmt:parseDate var="b" type="both" dateStyle="full" timeStyle="full">

${a}

</fmt:parseDate>

   <%

   out.println(pageContext.getAttribute("b").toString());

   out.println("<br>");

   out.println(pageContext.getAttribute("b").hashCode());

   %>

   </body>

</html>

【代碼解析】:

(1)使用<fmt:formatDate>把日期對象格式化成字符串。

(2)使用<fmt:parseDate>把字符串對象轉化爲日期對象,注意同(1)中的參數對比,能夠發現二者是一個互逆的過程。

(3)使用Java腳本進行測試Date對象的toString()方法能夠輸出時間字符串。hashCode()能夠獲得一個對象的hashCode。該方法只能應用於對象,所以能夠證實獲得的是一個日期對象。

5.<fmt:setTimeZone>標籤

該標籤用於設定默認時區或者將時區存儲在指定的JSP範圍內。

【語法】:

<fmt:setTimeZone value=」value」 [var=」name」][scope=」page|request|session|application」]/>

<fmt:setTimeZone>標籤屬性說明:

參數名

說明

EL

類型

必須

默認值

value

使用的時區

String

Java.util.TimeZone

var

使用var定義的參數名保存值

String

scope

存儲var的JSP範圍

String

page

value用來設定使用的時區,例如中國使用的時區爲CST,其餘的還有EST、PST等。能夠把時區存儲在指定的JSP範圍內,例如存儲在session中,用戶訪問的全部頁面均可以顯示使用的設定的時區下對應的時間。

【示例代碼】

<fmt:setTimeZone value=」EST」 scope=」session」/>

提示:有關TimeZone的說明見JDK幫助文檔的java.util.TimeZone類。

6.<fmt:timeZone>標籤

該標籤主要用於設置標籤體內使用的時區。

【語法】:

<fmt:timeZone value=」timeZone」>

…..

</fmt:timeZone>

使用<fmt:timeZone></fmt:timeZone>只會應用到標籤體內使用的時區,對標籤外部將不產生影響。

9.3.2 讀取消息資源

讀取消息資源用到的標籤主要有4個:<fmt:message>標籤、<fmt:param>標籤、<fmt:bundle>標籤和<fmt:setBundle>標籤。主要用於從資源文件中讀取信息。

1.<fmt:bundle>標籤

該標籤主要用於將資源文件綁定於它的標籤體中的顯示。

【語法】:

<fmt:bundle basename=」name」[prefix=」prefix」]>

….標籤主題

</fmt:bundle>

<fmt:bundle>標籤屬性說明:

參數名

說明

EL

類型

必須

默認值

basename

指定使用的資源文件的名稱

String

prefix

前置關鍵字

String

2.<fmt:setBundle>標籤

該標籤主要用於綁定資源文件或者把資源文件保存在指定的JSP範圍內。

【語法】:

<fmt:setBundle basename=」name」 [var=」name」]

                                     [scope=」page|request|session|application」]

<fmt:setBundle>標籤屬性說明:

參數名

說明

EL

類型

必須

默認值

basename

指定使用的資源文件的名稱

String

var

指定將資源文件保存的名稱

String

scope

設定將資源文件保存的JSP範圍

String

page

3.<fmt:message>標籤

該標籤主要負責讀取本地資源文件,從指定的消息文本資源文件中讀取鍵值,而且能夠將鍵值保存在指定的JSP範圍內。

【語法1】:

<fmt:message key=」keyName」[bundle=」bundle」]

                                     [scope=」page|request|session|application」]

/>

【語法2】:

<fmt:message key=」keyName」[bundle=」bundle」]

                                     [scope=」page|request|session|application」]

<fmt:param/>

</fmt:message>

【語法3】:

<fmt:message key=」keyName」[bundle=」bundle」]

                                                        [scope=」page|request|session|application」]

key<fmt:param/>

</fmt:message>

<fmt:message>標籤屬性說明:

參數名

說明

EL

類型

必須

默認值

key

指定鍵值的名稱(索引)

String

bundle

指定消息文本的來源

LocalizationContext

var

指定存儲鍵值的變量名

String

scope

指定var的做用域

String

page

提示:建議此處的bundle使用EL表達式,由於屬性bundle的類型爲LocalizationContext,而不是一個String類型的URL。

【示例代碼】:實現從指定的資源文件中讀取對應key的值。

首先編寫一個資源文件內容下

name=olive

password=01234

使用標籤從資源文件中讀取相應的值。

   <fmt:bundle basename="message">

   <c:out value="從message資源文件中獲得的key爲name的值爲:"></c:out>

   <fmt:message key="name" ></fmt:message>

   </fmt:bundle>

   <hr>

   <fmt:setBundle basename="message" var="m"/>

   <fmt:message key="password" bundle="${m}"></fmt:message>

    ${m}

    【代碼解析】:

(1)使用<fmt:bundle>標籤指定從message.properties文件中讀取值。

(2)使用<fmt:message>標籤讀取資源文件中key爲name的值。<fmt:message>標籤放在<fmt:bundle>標籤體內使用。

(3)使用<fmt:setBundle>標籤在page範圍綁定一個配置文件,以m爲參數名存儲。

(4)使用<fmt:message>標籤獲得key爲password的值,此處指定資源文件的方式爲使用<fmt:message>標籤的bundle屬性來設定。

(5)輸出參數m的值,加深對bundle的理解。

<fmt:bundle>標籤中有一個prefix屬性,該標籤用來指明前綴。例如配置文件內容以下:

org.person.name=olive

org.personpassword=01234

若是不使用prefix標籤,在取值是要指明前綴。例如:

<fmt:bundle basename=」message」>

<fmt:message key=」org.person.name」></fmt:message>

<fmt:message key=」org.person.password」></fmt:message>

</fmt:bundle>

使用prefix屬性能夠簡化取值時的代碼。

<fmt:bundle basename=」message」 prefix=」org.person」>

<fmt:message key=」name」></fmt:message>

<fmt:message key=」password」></fmt:message>

</fmt:bundle>

4.<fmt:param>標籤

該標籤主要用於當<fmt:message>中資源文件中得到鍵值時,動態的爲資源文件中的變量賦值。

【語法1】:

<fmt:param value=」value」/>

【語法2】:

<fmt:param >

…標籤主體

</fmt:param>

【示例代碼】:

(1)建立資源文件。在message.properties文件中增長一個key和value。

news={0} welcome to out website!<br>today is :{1,date}

表達的含義是鍵news對應的是一個字符串,字符串中還有動態變量{0}表示第一個動態變量,{1,date}表示第二個動態變量而且該變量是一個日期類型的對象。

(2)經過標籤從資源文件中取出鍵值,並給動態變量賦值顯示在頁面。

   <fmt:bundle basename="message">

   <fmt:message key="news">

   <fmt:param value="olive" />

   <fmt:param value="${date}"/>

   </fmt:message>

   </fmt:bundle>

  

【代碼解析】:

(1)使用<fmt:bundle>標籤把資源文件綁定在標籤體內。

(2)在<fmt:bundle>標籤體內使用<fmt:message>獲得鍵值。

(3)使用<fmt:param>爲資源文件中的動態變量賦值。

9.3.3 國際化

國際化這個分類中共包含兩個標籤:用於設定語言地區<fmt:setLocale/>和用於設定請求的字符編碼的<fmt:requestEncoding>標籤。

1.<fmt:setLocale/>標籤

<fmt:setLocale>標籤用來設定用戶語言區域。

【語法】:

<fmt:setLocale value=」locale」[variant=」variant」]

                            [scope=」page|request|session|application」]>

<fmt:setLocale>標籤屬性說明:

參數名

說明

EL

類型

必須

默認值

value

指定區域代碼

String

java.util.Locale

variant

操做系統的類型

String

scope

設定時區的做用範圍

String

page

value屬性用來指定使用的語言代碼,能夠從瀏覽器的【工具】---【Internet選項】---【語言】---【添加】中查看瀏覽器支持的語言種類及語言代碼。例如:中文(zh_cn)、臺灣(zh_tw)、香港(zh_mo)等。

【示例代碼】:實現了設定不一樣的區域代碼,根據不一樣的區域代碼瀏覽將顯示不一樣格式的日期。

   <fmt:setLocale value="en_us" />

   <fmt:formatDate value="${date}" type="both" dateStyle="full" timeStyle="full"/>

   <hr>

   <fmt:setLocale value="zh_cn" />

   <fmt:formatDate value="${date}" type="both" dateStyle="full" timeStyle="full"/>

   <hr>

   <fmt:setLocale value="zh_TW"/>

   <fmt:formatDate value="${date}" type="both" dateStyle="full" timeStyle="full"/>

【代碼解析】:

(1)瀏覽器默認跟您使用的操做系統的語言相同,所以默認值zh_cn。使用<fmt:setLocale/>標籤設置使用的語言爲en_us(英語)。使用<fmt:formateDate>格式化輸出的時間字符串,該標籤會根據不一樣的語言輸出不一樣的日期格式。

(2)使用的語言修改成zh_cn,再次用格式化輸出。

(3)使用語言修改成zh_TW,輸出格式化後的時間。

2.<fmt:requestEncoding>標籤

該標籤用於設定請求的編碼格式。功能同servletRequest.setCharacterEncoding()方法相同。

【語法】:

<fmt:requestEncoding [value=」charEncoding」]/>

【參數說明】:

value屬性用來指定使用的編碼集例如:gbk、gb2312等。當沒有給出value的值時將會自動搜索取尋找合適的編碼方式,所以可以很好的解決中文亂碼問題。

相關文章
相關標籤/搜索