看到 I** 就應(yīng)該想到知識(shí)“國(guó)際化”, I** formatting 標(biāo)簽庫(kù)就是用于在 JSP 頁(yè)面中做國(guó)際化的動(dòng)作。在該標(biāo)簽庫(kù)中的標(biāo)簽一共有 12 個(gè),被分為了兩類(lèi),分別是:
q 國(guó)際化核心標(biāo)簽: <fmt:setLocale> 、 <fmt:bundle> 、 <fmt:setBundle> 、 <fmt:message> 、 <fmt:param> 、 <fmt:requestEncoding> 。
q 格式化標(biāo)簽: <fmt:timeZone> 、 <fmt:setTimeZone> 、 <fmt:formatNumber> 、 <fmt:parseNumber> 、 <fmt:formatDate> 、 <fmt:parseDate> 。
下面只選擇其中常見(jiàn)的一些標(biāo)簽和屬性進(jìn)行介紹。
9.5.1 用于設(shè)置本地化環(huán)境的 <fmt:setLocale> 標(biāo)簽
<fmt:setLocale> 標(biāo)簽用于設(shè)置 Locale 環(huán)境。它的屬性和描述如表 9.17 所示:
表 9.17 <fmt:setLocale> 標(biāo)簽屬性和說(shuō)明
屬性 |
描述 |
value |
Locale 環(huán)境的指定,可以是 java.util.Locale 或 String 類(lèi)型的實(shí)例 |
scope |
Locale 環(huán)境變量的作用范圍(可選) |
下面看一個(gè)示例:
<fmt:setLocale value="zh_TW"/>
表示設(shè)置本地環(huán)境為繁體中文。
9.5.2 用于資源文件綁定的 <fmt:bundle> 、 <fmt:setBundle> 標(biāo)簽
這兩組標(biāo)簽用于資源配置文件的綁定,唯一不同的是 <fmt:bundle> 標(biāo)簽將資源配置文件綁定于它標(biāo)簽體中的顯示, <fmt:setBundle> 標(biāo)簽則允許將資源配置文件保存為一個(gè)變量,在之后的
根據(jù) Locale 環(huán)境的不同將查找不同后綴的資源配置文件,這點(diǎn)在國(guó)際化的任何技術(shù)上都是一致的,通常來(lái)說(shuō),這兩種標(biāo)簽單獨(dú)使用是沒(méi)有意義的,它們都會(huì)與 I** formatting 標(biāo)簽庫(kù)中的其他標(biāo)簽配合使用。它們的屬性和描述如表 9.18 所示:
表 9.18 <fmt:bundle> 、 <fmt:setBundle> 標(biāo)簽屬性和說(shuō)明
屬性 |
描述 |
basename |
資源配置文件的指定,只需要指定文件名而無(wú)須擴(kuò)展名,二組標(biāo)簽共有的屬性 |
var |
<fmt:setBundle> 獨(dú)有的屬性,用于保存資源配置文件為一個(gè)變量 |
scope |
變量的作用范圍 |
下面看一個(gè)示例
<fmt:setLocale value="zh_CN"/>
<fmt:setBundle basename="applicationMessage" var="applicationBundle"/>
該示例將會(huì)查找一個(gè)名為 applicationMessage_zh_CN.properties 的資源配置文件,來(lái)作為顯示的 Resource 綁定。
9.5.3 用于顯示資源配置文件信息的 <fmt:message> 標(biāo)簽
用于信息顯示的標(biāo)簽,將顯示資源配置文件中定義的信息。它的屬性和描述如表 9.19 所示:
表 9.19 <fmt:message> 標(biāo)簽屬性和說(shuō)明
屬性 |
描述 |
key |
資源配置文件的“鍵”指定 |
bundle |
若使用 <fmt:setBundle> 保存了資源配置文件,該屬性就可以從保存的資源配置文件中進(jìn)行查找 |
var |
將顯示信息保存為一個(gè)變量 |
scope |
變量的作用范圍 |
下面看一個(gè)示例:
<fmt:setBundle basename="applicationMessage" var="applicationBundle"/>
<fmt:bundle basename="applicationAllMessage">
<fmt:message key="userName" />
<p>
<fmt:message key="passWord" bundle="${applicationBundle}" />
</fmt:bundle>
該示例使用了兩種資源配置文件的綁定的做法,“ applicationMessage ”資源配置文件利用 <fmt:setBundle> 標(biāo)簽被賦于了變量“ applicationBundle ”,而作為 <fmt:bundle> 標(biāo)簽定義的“ applicationAllMessage ”資源配置文件作用于其標(biāo)簽體內(nèi)的顯示。
q 第一個(gè) <fmt:message> 標(biāo)簽將使用“ applicationAllMessage ”資源配置文件中“鍵”為“ userName ”的信息顯示。
q 第二個(gè) <fmt:message> 標(biāo)簽雖然被定義在 <fmt:bundle> 標(biāo)簽體內(nèi),但是它使用了 bundle 屬性,因此將指定之前由 <fmt:setBundle> 標(biāo)簽保存的“ applicationMessage ”資源配置文件,該“鍵”為“ passWord ”的信息顯示。
9.5.4 用于參數(shù)傳遞的 <fmt:param> 標(biāo)簽
<fmt:param> 標(biāo)簽應(yīng)該位于 <fmt:message> 標(biāo)簽內(nèi),將為該消息標(biāo)簽提供參數(shù)值。它只有一個(gè)屬性 value 。
<fmt:param> 標(biāo)簽有兩種使用版本,一種是直接將參數(shù)值寫(xiě)在 value 屬性中,另一種是將參數(shù)值寫(xiě)在標(biāo)簽體內(nèi)。
9.5.6 用于為請(qǐng)求設(shè)置字符編碼的 <fmt:requestEncoding> 標(biāo)簽
<fmt:requestEncoding> 標(biāo)簽用于為請(qǐng)求設(shè)置字符編碼。它只有一個(gè)屬性 value ,在該屬性中可以定義字符編碼。
9.5.7 用于設(shè)定時(shí)區(qū)的 <fmt:timeZone> 、 <fmt:setTimeZone> 標(biāo)簽
這兩組標(biāo)簽都用于設(shè)定一個(gè)時(shí)區(qū)。唯一不同的是 <fmt:timeZone> 標(biāo)簽將使得在其標(biāo)簽體內(nèi)的工作可以使用該時(shí)區(qū)設(shè)置, <fmt:setBundle> 標(biāo)簽則允許將時(shí)區(qū)設(shè)置保存為一個(gè)變量,在之后的工作可以根據(jù)該變量來(lái)進(jìn)行。它們的屬性和描述如表 9.20 所示:
表 9.20 <fmt:timeZone> 、 <fmt:setTimeZone> 標(biāo)簽 屬性和說(shuō)明
屬性 |
描述 |
value |
時(shí)區(qū)的設(shè)置 |
var |
<fmt:setTimeZone> 獨(dú)有的屬性,用于保存時(shí)區(qū)為一個(gè)變量 |
scope |
變量的作用范圍 |
9.5.8 用于格式化數(shù)字的 <fmt:formatNumber> 標(biāo)簽
<fmt: formatNumber > 標(biāo) 簽用于格式化數(shù)字。它的屬性和描述如表 9.21 所示:
表 9.21 <fmt:formatNumber> 標(biāo)簽屬性和說(shuō)明
屬性 |
描述 |
value |
格式化的數(shù)字,該數(shù)值可以是 String 類(lèi)型或 java.lang.Number 類(lèi)型的實(shí)例 |
type |
格式化的類(lèi)型 |
pattern |
格式化模式 |
var |
結(jié)果保存變量 |
scope |
變量的作用范圍 |
maxIntegerDigits |
指定格式化結(jié)果的最大值 |
minIntegerDigits |
指定格式化結(jié)果的最小值 |
maxFractionDigits |
指定格式化結(jié)果的最大值,帶小數(shù) |
minFractionDigits |
指定格式化結(jié)果的最小值,帶小數(shù) |
<fmt:formatNumber> 標(biāo)簽實(shí)際是對(duì)應(yīng) java.util.NumberFormat 類(lèi), type 屬性的可能值包括 currency (貨幣)、 number (數(shù)字)和 percent (百分比)。
下面看一個(gè)示例。
<fmt:formatNumber value="1000.888" type="currency" var="money"/>
9.5.9 用于解析數(shù)字的 <fmt:parseNumber> 標(biāo)簽
<fmt:parseNumber> 標(biāo)簽用于解析一個(gè)數(shù)字,并將結(jié)果作為 java.lang.Number 類(lèi)的實(shí)例返回。 <fmt:parseNumber> 標(biāo)簽看起來(lái)和 <fmt:formatNumber> 標(biāo)簽的作用正好相反。它的屬性和描述如表 9.22 所示:
表 9.22 <fmt:parseNumber> 標(biāo)簽屬性和說(shuō)明
屬性 |
描述 |
value |
將被解析的字符串 |
type |
解析格式化的類(lèi)型 |
pattern |
解析格式化模式 |
var |
結(jié)果保存變量,類(lèi)型為 java.lang.Number |
scope |
變量的作用范圍 |
parseLocale |
以本地化的形式來(lái)解析字符串,該屬性的內(nèi)容應(yīng)為 String 或 java.util.Locale 類(lèi)型的實(shí)例 |
下面看一個(gè)示例。
<fmt:parseNumber value="15%" type="percent" var="num"/>
解析之后的結(jié)果為“ 0.15 ”。
9.5.10 用于格式化日期的 <fmt:formatDate> 標(biāo)簽
<fmt:formatDate> 標(biāo)簽用于格式化日期。它的屬性和描述如表 9.23 所示:
表 9.23 <fmt:formatDate> 標(biāo)簽屬性和說(shuō)明
屬性 |
描述 |
value |
格式化的日期,該屬性的內(nèi)容應(yīng)該是 java.util.Date 類(lèi)型的實(shí)例 |
type |
格式化的類(lèi)型 |
pattern |
格式化模式 |
var |
結(jié)果保存變量 |
scope |
變量的作用范圍 |
timeZone |
指定格式化日期的時(shí)區(qū) |
<fmt:formatDate> 標(biāo)簽與 <fmt:timeZone> 、 <fmt:setTimeZone> 兩組標(biāo)簽的關(guān)系密切。若沒(méi)有指定 timeZone屬性, 也可以通過(guò) <fmt:timeZone> 、 <fmt:setTimeZone> 兩組標(biāo)簽設(shè)定的時(shí)區(qū)來(lái)格式化最后的結(jié)果。
9.5.11 用于解析日期的 <fmt:parseDate> 標(biāo)簽
<fmt:parseDate> 標(biāo)簽用于解析一個(gè)日期,并將結(jié)果作為 java.lang.Date 類(lèi)型的實(shí)例返回。 <fmt:parseDate> 標(biāo)簽看起來(lái)和 <fmt:formatDate> 標(biāo)簽的作用正好相反。它的屬性和描述如表 9.24 所示:
表 9.24 <fmt:parseDate> 標(biāo)簽屬性和說(shuō)明
屬性 |
描述 |
value |
將被解析的字符串 |
type |
解析格式化的類(lèi)型 |
pattern |
解析格式化模式 |
var |
結(jié)果保存變量,類(lèi)型為 java.lang.Date |
scope |
變量的作用范圍 |
parseLocale |
以本地化的形式來(lái)解析字符串,該屬性的內(nèi)容為 String 或 java.util.Locale 類(lèi)型的實(shí)例 |
timeZone |
指定解析格式化日期的時(shí)區(qū) |
<fmt:parseNumber> 和 <fmt:parseDate> 兩組標(biāo)簽都實(shí)現(xiàn)解析字符串為一個(gè)具體對(duì)象實(shí)例的工作,因此,這兩組解析標(biāo)簽對(duì) var 屬性的字符串參數(shù)要求非常嚴(yán)格。就 JSP 頁(yè)面的表示層前段來(lái)說(shuō),處理這種解析本不屬于份內(nèi)之事,因此 <fmt:parseNumber> 和 <fmt:parseDate> 兩組標(biāo)簽應(yīng)該盡量少用,替代工作的地方應(yīng)該在服務(wù)器端表示層的后段,比如在 Servlet 中。
附:fmt例子
<fmt:formatNumber value="12" type="currency" pattern="$.00"/> -- $12.00
<fmt:formatNumber value="12" type="currency" pattern="$.0#"/> -- $12.0
<fmt:formatNumber value="1234567890" type="currency"/> -- $1,234,567,890.00(那個(gè)貨幣的符號(hào)和當(dāng)前web服務(wù)器的 local 設(shè)定有關(guān))
<fmt:formatNumber value="123456.7891" pattern="#,#00.0#"/> -- 123,456.79
<fmt:formatNumber value="123456.7" pattern="#,#00.0#"/> -- 123,456.7
<fmt:formatNumber value="123456.7" pattern="#,#00.00#"/> -- 123,456.70
<fmt:formatNumber value="12" type="percent" /> -- 1,200%type 可以是currency、 number、 和percent。