版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第11章國際化
11.1目標演示
11.2編寫資源文件
11.3實現(xiàn)用戶管理界面的國際化
11.4數(shù)字的格式化
11.5日期的格式化
小結(jié)
習題11實訓11:圖書管理界面的國際化
11.1目標演示
11.1.1功能描述
前面完成的用戶管理界面使用的都是中文,現(xiàn)在希望用戶可以選擇自己的語言。如果選擇中文,則顯示中文界面;如果選擇英文,則顯示英文界面。如果用戶沒有選擇,則根據(jù)用戶瀏覽器的默認語言顯示。11.1.2運行效果
如果讀者的瀏覽器的默認語言是中文,那么看到的用戶管理界面如圖11.1所示。如果讀者的瀏覽器的默認語言是英語,那么看到的用戶管理界面如圖11.2所示。
兩個界面的相同之處是界面中的所有動態(tài)信息是相同的,也就是用戶信息是相同的。不同之處在于頁面的靜態(tài)信息,圖11.1中的靜態(tài)信息是中文,圖11.2中的靜態(tài)信息是英文。
進入這個界面之后用戶可以任意選擇語言。選擇“中文”,可以看到如圖11.1所示的界面;選擇“English”,能夠看到如圖11.2所示的界面。
圖11.1默認的用戶管理界面
圖11.2用戶選擇English時候的界面
11.1.3思路分析
要想使網(wǎng)站同時支持中文和英文,最直接的想法可能就是編寫兩個網(wǎng)站,一個使用英文,一個使用中文。從實現(xiàn)上來說,這沒有任何問題。但是在完成這兩個網(wǎng)站的時候,會發(fā)現(xiàn)兩個網(wǎng)站的大部分內(nèi)容,例如格式、功能、信息等都是相同的,只有少數(shù)信息,就是給用戶的提示信息是不同的。例如,在用戶管理界面上,基本格式完全相同,用戶信息也相同,功能也完全相同,不同的是給用戶的提示信息,中文可能會使用“用戶名”,英文可能會使用“Username如果能夠共享這些相同的功能,然后把不同的信息放在不同的文件中,需要的時候從這些文件中調(diào)用不相同的部分,這樣維護起來就非常方便了,一旦某一天網(wǎng)站需要支持日文,只需要編寫一個存儲日文信息的文件即可;如果功能發(fā)生改變,只需要修改一個版本即可。這就是國際化的基本思路。
從上面的分析可以看出,要完成國際化,需要做以下幾件事情:
●編寫資源文件:把網(wǎng)站中需要使用不同語言顯示的信息單獨提取出來,然后按照不同語言把它們寫在不同的文件中,如把中文信息寫在中文文件中,把英文信息寫在英文文件中。
●設置語言:當用戶選擇中文或者英文的時候,可以根據(jù)用戶的選擇進行設置。
●調(diào)用資源文件:在完成功能的過程中,如果需要中文信息,就從中文文件中讀??;如果需要英文信息,就從英文文件中讀取。
●系統(tǒng)中的數(shù)字、貨幣、日期也應該按照特定的方式進行處理。
在JSP的標準標簽庫中提供了多個標簽,這些標簽可用于完成網(wǎng)站的國際化。
11.2編寫資源文件
11.2.1資源文件內(nèi)容的確定
首先要提取網(wǎng)站中需要使用不同語言顯示的信息。在用戶管理界面中,包括如下信息:
(1)頁面提示信息:
●中文:“所有用戶信息”。
●英文:“AllUserInfo”。
(2)分頁顯示:
●中文:“共有X頁,這是第Y頁。第一頁
上一頁
下一頁
最后一頁”。
●英文:“Total:Xpages,current:Y.firstpreviousnext
last”。
注:其中X和Y是變量。
(3)表頭信息:
●中文:“用戶編號”、“用戶名”、“用戶類型”、“生日”、“學歷”、“地區(qū)”、“Email”和“地址”。
●英文:“userid”、“username”、“type”、“birthday”、“degree”、“l(fā)ocal”、“Email”和“address”。
(4)按鈕信息:
●中文:“刪除”和“更新”。
●英文:“delete”和“modify”。
11.2.2資源文件的格式
資源文件可以采用屬性文件的形式,也可以采用Java文件的形式。
1.采用屬性文件
在屬性文件中每一行表示一條信息。每一行的基本格式如下:
信息名=信息的值
信息名用于標識這條信息。在屬性文件中不能有兩條信息的名字是相同的。為了調(diào)用方便,在不同語言的屬性文件中相同信息的名字是相同的。等號后面是這條信息的內(nèi)容,在界面上顯示的就是這個內(nèi)容。中文文件中信息的內(nèi)容是中文,英文文件中信息的內(nèi)容是英文。例如,界面中刪除按鈕上的文字在不同語言的屬性文件中的實現(xiàn)如下:
中文:userinfo.delete=刪除。
英文:userinfo.delete=delete。
這里,信息的名字相同,都是userinfo.delete,值不相同,分別是“刪除”和“delete”。
在信息中也可以使用變量。如果要在信息中使用變量,可以使用“{n}”來表示。如果有多個變量,可以使用多個不同的數(shù)字表示。例如,要顯示當前用戶,可以使用下面的
格式:
pageinfo=共有
{0}頁,這是第
{1}頁。
該信息中就包含了兩個變量,分別用“{0}”和“{1}”表示。在調(diào)用這個信息時會使用總頁數(shù)和當前頁數(shù)代替信息中的變量。
2.采用Java文件
使用Java文件,首先這個類必須繼承java.util.ListResourceBundle。系統(tǒng)在讀取資源文件的時候會使用這個類提供的一些方法。
對于資源文件中信息的描述,采用靜態(tài)的二維對象數(shù)組,也就是對象數(shù)組的數(shù)組在文件中定義靜態(tài)成員變量。下面是一個例子:
privatestaticObjectcontents[][]=
{
{"userinfo.delete","delete"},
{"userinfo.modify","modify"},
{"pageinfo","Total:{0}pages,current:{1}."},
}數(shù)組的每一個元素就是一條信息。每個元素又是一個數(shù)組,數(shù)組中第一個元素是信息的名字,第二個元素是信息的值。如果信息中存在變量,則其用法與在屬性文件中的用法相同。
除了定義這個成員變量之外,需要再定義一個獲取該成員變量信息的方法,定義
如下:
publicObject[][]getContents()
{
returncontents;
}11.2.3轉(zhuǎn)換成Unicode編碼
如果屬性文件是中文,并且采用資源文件,則需要先將它轉(zhuǎn)換成Unicode編碼才可以,否則系統(tǒng)會出現(xiàn)亂碼??梢允褂肑DK中的native2ascii命令進行轉(zhuǎn)化,命令格式如下:
native2ascii原文件
轉(zhuǎn)換后文件
下面是一個轉(zhuǎn)換的例子:
native2asciipertiesuserinfo_perties
其中,perties是原來的資源文件,userinfo_zh是轉(zhuǎn)換后的文件,實際使用的是后面的文件。
11.2.4資源文件的名字
首先是文件的擴展名。如果使用屬性文件,則文件的擴展名是properties。如果使用Java文件,則使用編譯后的Java文件。
不管使用Java文件還是使用屬性文件,文件名都由兩部分組成:第一部分是文件的名字,通常根據(jù)作用命名;第二部分是文件的語言類型,需要根據(jù)所使用的語言確定(這個采用國際標準),若遇到要區(qū)分使用同一種語言的多個國家,則在文件的后面需要增加國家代碼。
下面是一個資源文件的名字,采用屬性文件的方式:
resource_perties
其中,resource是資源文件的名字,en表示英語,中間使用下劃線連接。
下面是采用Java文件的資源文件:
resource_en.java
其中,resource是資源文件的名字,en表示英語,中間使用下劃線連接。
下面例子的資源文件名中包含了國家信息:
resource_es_MX.properties
表示采用西班牙語,國家為墨西哥。
如果文件名中不包括第二部分,也就是不包含國家和語言,那么這個文件就是默認資源文件。如果系統(tǒng)找不到相應的語言對應的資源文件,系統(tǒng)會使用默認資源文件。
如果想了解常用的語言和國家代碼,可以通過瀏覽器的語言設置功能查看。要進行語言設置,選擇【工具】→【Internet選項】,彈出一個設置界面,在該界面中選擇【常規(guī)】→【語言】,彈出語言的查看和設置界面,點擊【添加語言】彈出如圖11.3所示界面,在該界面中可以看到所有的國家和語言。
圖11.3瀏覽器中的語言選擇
11.2.5資源文件的部署
資源文件的部署位置與類文件的部署位置相同,如果采用Java文件作為資源文件,則該Java文件與普通的Java文件沒有任何區(qū)別。如果使用屬性文件,則可以在classes中創(chuàng)建文件夾存放屬性文件,并且可以創(chuàng)建多層文件夾。如果使用多層文件夾存放屬性文件,那么在訪問的時候需要寫出文件夾的名字,就像訪問類的時候要寫包的名字一樣。
11.2.6用戶管理的資源文件
1.中文屬性文件
文件名:perties。
文件內(nèi)容如下:
title=所有用戶信息
pageinfo=共有
{0}頁,這是第
{1}頁。
first=第一頁
previous=上一頁
next=下一頁
last=最后一頁
moveto.before=跳轉(zhuǎn)到
moveto.after=頁
moveto.confirm=確定
userinfo.userid=用戶編號
userinfo.username=用戶名
userinfo.type=用戶類型
userinfo.birthday=生日
userinfo.degree=學歷
userinfo.local=地區(qū)
userinfo.email=Email
userinfo.address=地址
userinfo.delete=刪除
userinfo.modify=更新
monuser=普通用戶
usertype.manager=管理員
delete.confirm=刪除該用戶?2.編碼轉(zhuǎn)換后的文件
轉(zhuǎn)換后的文件名:userinfo_perties。
文件內(nèi)容如下:
title=\u6240\u6709\u7528\u6237\u4fe1\u606f
pageinfo=\u5171\u6709{0}\u9875\uff0c\u8fd9\u662f\u7b2c{1}\u9875\u3002
first=\u7b2c\u4e00\u9875
previous=\u4e0a\u4e00\u9875
next=\u4e0b\u4e00\u9875
last=\u6700\u540e\u4e00\u9875
moveto.before=\u8df3\u8f6c\u5230
moveto.after=\u9875
moveto.confirm=\u786e\u5b9a
userinfo.userid=\u7528\u6237\u7f16\u53f7
userinfo.username=\u7528\u6237\u540d
userinfo.type=\u7528\u6237\u7c7b\u578b
userinfo.birthday=\u751f\u65e5
userinfo.degree=\u5b66\u5386
userinfo.local=\u5730\u533a
userinfo.email=Email
userinfo.address=\u5730\u5740
userinfo.delete=\u5220\u9664
userinfo.modify=\u66f4\u65b0
monuser=\u666e\u901a\u7528\u6237
usertype.manager=\u7ba1\u7406\u5458
delete.confirm=\u5220\u9664\u8be5\u7528\u6237?
3.英文屬性文件
文件名:userinfo_perties。
文件內(nèi)容如下:
title=AllUserInfo
pageinfo=Total:{0}pages,current:{1}.
first=first
previous=previous
next=next
last=last
moveto.before=moveto
moveto.after=
moveto.confirm=confirm
userinfo.userid=userid
userinfo.username=username
userinfo.type=type
userinfo.birthday=birthday
userinfo.degree=degree
userinfo.local=local
userinfo.email=Email
userinfo.address=address
userinfo.delete=delete
userinfo.modify=modify
monuser=common
usertype.manager=manager
delete.confirm=Deletetheselecteduser?
4.中文Java資源文件
文件名:userinfo_zh.java。
文件內(nèi)容如下:
packagemyresource;
importjava.util.ListResourceBundle;
publicclassuserinfo_zhextendsListResourceBundle
{
publicObject[][]getContents()
{
returncontents;
}
privatestaticObjectcontents[][]=
{
{"title","所有用戶信息"},
{"pageinfo","共有
{0}頁,這是第
{1}頁。"},
{"first","第一頁"},
{"previous","上一頁"},
{"next","下一頁"},
{"last","最后一頁"},
{"moveto.before","跳轉(zhuǎn)到"},
{"moveto.after","頁"},
{"moveto.confirm","確定"},
{"userinfo.userid","用戶ID"},
{"userinfo.username","用戶名"},
{"userinfo.type","用戶類型"},
{"userinfo.birthday","生日"},
{"userinfo.degree","學歷"},
{"userinfo.local","地區(qū)"},
{"userinfo.email","Email"},
{"userinfo.address","地址"},
{"userinfo.delete","刪除"},
{"userinfo.modify","更新"},
{"monuser","普通用戶"},
{"usertype.manager","管理員"},
{"delete.confirm","刪除該用戶?"}
};
}5.英文Java資源文件
文件名:userinfo_en.java。
文件內(nèi)容如下:
packagemyresource;
importjava.util.ListResourceBundle;
publicclassuserinfo_enextendsListResourceBundle
{
publicObject[][]getContents()
{
returncontents;
}
privatestaticObjectcontents[][]=
{
{"title","AllUserInfo"},
{"pageinfo","Total:{0}pages,current:{1}."},
{"first","first"},
{"previous","previous"},
{"next","next"},
{"last","last"},
{"moveto.before","moveto"},
{"moveto.after",""},
{"moveto.confirm","confirm"},
{"userinfo.userid","userid"},
{"userinfo.username","username"},
{"userinfo.type","type"},
{"userinfo.birthday","birthday"},
{"userinfo.degree","degree"},
{"userinfo.local","local"},
{"userinfo.email","Email"},
{"userinfo.address","address"},
{"userinfo.delete","delete"},
{"userinfo.modify","modify"},
{"monuser","common"},
{"usertype.manager","manager"},
{"delete.confirm","Deletetheselecteduser?"}
};
}
11.3實現(xiàn)用戶管理界面的國際化
11.3.1設置所使用的語言
國際化使用的是標準標簽庫中的fmt標簽庫,要設置當前用戶使用的語言可以使用該標簽庫中的<fmt:setLocale>標簽。
該標簽的格式如下:
<fmt:setLocalevalue="語言國家代碼"[scope="{page|request|session|application}"]/>
value屬性指出所使用的語言和國家,可以只有語言,如果同時有語言和國家,中間使用下劃線連接。語言代碼由ISO639標準定義,國家代碼由ISO3166標準定義。例如使用英文可以使用en,使用中文可以使用zh,如果是中國大陸地區(qū)的中文可以使用zh_CN。
scope指出該設置的作用范圍。通常情況下,該設置只對當前用戶有效,也就是使用session,并且某個用戶在整個訪問過程中所使用的語言也應該是相同的。
要設置使用英文,可以使用下面的代碼:
<fmt:setLocalevalue="en"/>
如果當前用戶希望使用簡體中文,可以使用下面的代碼:
<fmt:setLocalevalue="zh_CN"scope="session"/>
如果沒有設置語言和地區(qū),則系統(tǒng)會采用用戶請求時使用的默認值。這個默認值與用戶的瀏覽器設置相關,要設置瀏覽器的語言,可以參考11.2.4小節(jié)。
也可以為應用設置默認的地區(qū)和語言,即在web.xml文件中添加如下代碼:
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.locale</param-name>
<param-value>en</param-value>
</context-param>11.3.2確定要訪問的資源文件
Web應用中可能存在多個資源文件,此時可以使用<fmt:setBundle>標簽來確定使用哪個資源文件。
<fmt:setBundle>標簽的基本格式如下:
<fmt:setBundle[var=“變量名”] [scope="{page|request|session|application}"]
basename="資源文件的名字"/>
var屬性和scope屬性與前面介紹的其他標簽中的var屬性和scope屬性的作用是相同的。basename指出要使用的資源文件的名字,必須是完整的名字。如果是Java文件,應該包含包的信息;如果是屬性文件,應該包含屬性文件所在文件夾的信息。另外,在文件中不需要寫出文件的后綴名以及資源文件的文件名中標識國家和語言的部分。
例如,要使用前面編寫好的資源文件,可以使用下面的代碼:
<fmt:setBundlevar="userinfo_re"
basename="myresource.userinfo"/>
這個標簽的作用是把basename屬性指出的資源文件中的信息保存到var指定的變量userinfo-_re中。注意basename中的格式,myresource是存放資源文件的文件夾,userinfo是資源文件的名字,不包含后綴名properties,也不包含_en或者_zh等信息。
在使用這個標簽的時候,如果不使用var指定一個變量,則這個資源文件將成為默認的資源文件。如果在訪問資源文件中的內(nèi)容時不指定資源文件,就會訪問這個默認的資源文件。
<fmt:setBundle>的作用是先確定資源文件,然后通過其他標簽來使用。也可以采用另外一種方式,在使用資源文件的時候確定資源文件,這時可以使用<fmt:bundle>標簽。
<fmt:bundle>標簽的格式如下:
<fmt:bundlebasename="資源文件的名字"[prefix="前綴"]>
<fmt:message>標簽
</fmt:bundle>
該標簽的屬性主要是basename,其作用與<fmt:setBundle>標簽中的basename屬性的作用完全相同。<fmt:message>標簽用于讀取資源文件中的信息,接下來會介紹。
11.3.3訪問資源文件中的內(nèi)容
訪問資源文件可以使用<fmt:message>標簽。該標簽的基本格式如下:
<fmt:messagekey="消息名"
[bundle="bundle名字"]
[var="變量名"]
[scope="{page|request|session|application}"]
/>
該標簽的基本作用是在界面上顯示資源文件中的信息。
該信息從哪個資源文件中讀取,可以通過bundle屬性確定,bundle屬性確定的值是在前面通過<fmt:setBundle>設置好的。如果該標簽出現(xiàn)在<fmt:bundle>標簽內(nèi)部,則<ftm:message>標簽不再需要bundle屬性。
要訪問資源文件中的哪條信息,由key屬性確定。如果<fmt:bundle>標簽使用prerfix屬性指定了前綴,則實際的消息名字是prefix指定的前綴加上key屬性指定的名字。
該標簽的默認作用是輸出,如果該標簽使用了var屬性,則消息會存儲在var屬性指定的變量中,而不是顯示在界面上。也可以使用scope屬性指定變量的作用范圍。
下面三段代碼的作用相同。
代碼段1:
<!--設置資源文件-->
<fmt:setBundlevar="userinfo_re"
basename="myresource.userinfo"/>
<!--訪問資源文件-->
<fmt:messagekey="userinfo.delete"
bundle="userinfo_re"
/>
代碼段2:
<!--在使用資源文件的同時,設置資源文件-->
<fmt:bundlebasename="myresource.userinfo">
<!--訪問資源文件-->
<fmt:messagekey="userinfo.delete"/>
</fmt:bundle>代碼段3:
<!--在使用資源文件的同時,設置資源文件-->
<fmt:bundlebasename="myresource.userinfo"prefix="userinfo.">
<!--訪問資源文件-->
<fmt:messagekey="delete"/>
</fmt:bundle>
如果想把資源文件中的信息存儲在變量中,可以使用下面的代碼:
<fmt:bundlebasename="myresource.userinfo"prefix="userinfo.">
<!--訪問資源文件-->
<fmt:messagekey="delete"
var="delete"
/>
</fmt:bundle>
如果要訪問的消息中包含變量,則需要提供變量的值,可以使用<fmt:param>標簽完成。
<fmt:param>標簽的基本格式如下:
<fmt:paramvalue="參數(shù)的值"/>或者
<fmt:param>
參數(shù)的值
</fmt:param>
如果在消息中使用了多個參數(shù),則需要使用多個<fmt:param>標簽,參數(shù)的順序與消息中變量的順序應該保持一致。
前面編寫的資源文件的頁碼信息中包含了變量,要訪問這個信息可以使用下面的代碼:
<!--在使用資源文件的同時,設置資源文件-->
<fmt:bundlebasename="myresource.userinfo">
<!--訪問資源文件-->
<fmt:messagekey="pageinfo">
<!--傳遞第一個參數(shù):總頁數(shù)-->
<fmt:paramvalue="${pageCount}"/>
<!--傳遞第二個參數(shù):當前頁數(shù)-->
<fmt:paramvalue="${pageNo}"/>
</fmt:message>
</fmt:bundle>
11.3.4添加語言選擇功能
在界面上添加兩個超鏈接,內(nèi)容分別是“中文”和“English”。然后添加處理文件,當用戶點擊某一個超鏈接的時候應該把用戶的選擇設置成當前用戶使用的語言。
超鏈接如下:
<ahref="findAllUser?language=zh">中文</a>|
<ahref="findAllUser?language=en">English</a>
處理代碼要獲取用戶的選項,然后使用<fmt:setLocale>標簽賦值。代碼如下:
<c:iftest="${!emptyparam.language}">
<fmt:setLocalevalue="${param.language}"scope="session"/>
</c:if>
先判斷有沒有用戶選擇,如果沒有,就不需要設置了,而采用默認值;如果有,則根據(jù)用戶的選擇進行設置。
11.3.5修改后的文件
文件名:userlist.jsp。
源代碼:
<%@pagecontentType="text/html;charset=gb2312"%>
<%@taglibprefix="c"uri="/jsp/jstl/core"%>
<%@taglibprefix="fmt"uri="/jsp/jstl/fmt"%>
<c:iftest="${!emptyparam.language}">
<fmt:setLocalevalue="${param.language}"scope="session"/>
</c:if>
<scriptlanguage="javascript">
functioninit(){
alert("${info}");
}
<c:iftest="${!emptyinfo}">
window.onload=init;
</c:if>
</script>
<fmt:bundlebasename="myresource.userinfo">
<h2align=center>
<fmt:messagekey="title"/>
<h2>
<fontsize=2>
<ahref="findAllUser?language=zh">中文</a>|
<ahref="findAllUser?language=en">English</a>
</font><br>
<fontsize=4>
<fmt:messagekey="pageinfo">
<fmt:paramvalue="${pageCount}"/>
<fmt:paramvalue="${pageNo}"/>
</fmt:message>
<!--如果是第一頁,則不顯示超鏈接-->
<c:iftest="${pageNo==1}">
<fmt:messagekey="first"/>
<fmt:messagekey="previous"/>
</c:if>
<!--如果不是第一頁,則顯示超鏈接-->
<c:iftest="${pageNo!=1}">
<ahref="findAllUser?pageNo=1"><fmt:messagekey="first"/></a><ahref="findAllUser?pageNo=${pageNo-1}"><fmt:messagekey="previous"/></a>
</c:if>
<!--如果是最后一頁,則不顯示超鏈接-->
<c:iftest="${pageNo==pageCount}">
<fmt:messagekey="next"/>
<fmt:messagekey="last"/>
</c:if>
<!--如果不是最后一頁,則顯示超鏈接-->
<c:iftest="${pageNo!=pageCount}">
<ahref="findAllUser?pageNo=${pageNo+1}"><fmt:messagekey="next"/></a>
<ahref="findAllUser?pageNo=${pageCount}"><fmt:messagekey="last"/></a>
</c:if>
<formaction="findAllUser">
<fmt:messagekey="moveto.before"/>
<inputtype="text"name="pageNo">
<fmt:messagekey="moveto.after"/>
<inputtype="submit"value="<fmt:messagekey="moveto.confirm"/>">
</form>
</font>
<tablealign=center>
<tr>
<th><fmt:messagekey="userinfo.userid"/></th>
<th><fmt:messagekey="userinfo.username"/></th>
<th><fmt:messagekey="userinfo.type"/></th>
<th><fmt:messagekey="userinfo.birthday"/></th>
<th><fmt:messagekey="userinfo.degree"/></th>
<th><fmt:messagekey="userinfo.local"/></th>
<th><fmt:messagekey="userinfo.email"/></th>
<th><fmt:messagekey="userinfo.address"/></th>
<th><fmt:messagekey="userinfo.modify"/></th>
<th><fmt:messagekey="userinfo.delete"/></th>
</tr>
<c:forEachitems="${userlist}"var="user">
<tr>
<td>${user.userid}</td>
<td>${user.username}</td>
<td>
<c:iftest="${user.type==0}">
<fmt:messagekey="monuser"/></c:if>
<c:iftest="${user.type==1}">
<fmt:messagekey="usertype.manager"/></c:if>
</td>
<td>${user.birthday}</td>
<td>${user.degree}</td>
<td>${user.local}</td>
<td>${user.email}</td>
<td>${user.address}</td>
<td>
<formaction="updateFindUser"method="post">
<inputtype="submit"value="<fmt:messagekey="userinfo.modify"/>">
<inputtype="hidden"name="userid"value="${user.userid}">
</form>
</td>
<td>
<formaction="deleteUser"method="post"
onSubmit="returnconfirm('<fmt:messagekey="delete.confirm"/>');">
<inputtype="hidden"name="userid"value="${user.userid}">
<inputtype="submit"value="<fmt:messagekey="userinfo.delete"/>">
</form>
</td>
</tr>
</c:forEach>
</table>
</fmt:bundle>
11.4數(shù)字的格式化
11.4.1格式化數(shù)字
數(shù)字的格式化使用標準標簽庫的格式化標簽中的<fmt:formatNumber>標簽完成?;靖袷饺缦拢?/p>
<fmt:formatNumbervalue="目標數(shù)字"
[type="{number|currency|percent"]
[pattern=“格式”]
[currencySymbol=“貨幣符號”]
[groupingUsed=“{true|false}”]
[maxIntegerDigits=“最大整數(shù)位”]
[minIntegerDigits=“最小整數(shù)位”]
[maxFractionDigits=“最大小數(shù)位”]
[minFractionDigits=“最小小數(shù)位”]
[var=“變量名”]
[scope="{page|request|session|application}"]
/>
value屬性指出需要格式化的數(shù)字。type指出數(shù)字的類型,可選的類型是數(shù)字、貨幣和百分數(shù)。pattern屬性可以讓用戶采用自定義的格式來設計數(shù)字的顯示方式。currencySymbol用于指定貨幣的符號,在格式化貨幣的時候起作用。如果不指定這個值,系統(tǒng)會根據(jù)默認的Local(國家和語言)確定貨幣符號。maxIntegerDigits、minIntegerDigits、maxFractionDigits和minFractionDigits分別表示小數(shù)點之前的最大位數(shù)、小數(shù)點之前的最小位數(shù)、小數(shù)點之后的最大位數(shù)和小數(shù)點之后的最小位數(shù)。var屬性可以指定一個變量保存格式化后的結(jié)果,如果沒有var屬性,格式化后的結(jié)果將直接顯示。scope指出變量的作用范圍。
例如下面的代碼:
<fmt:formatNumbervalue="456.7"
maxIntegerDigits="7"
minIntegerDigits="4"
maxFractionDigits="3"
minFractionDigits="2"
/>
輸出的結(jié)果是:0,456.70。
因為整數(shù)部分和小數(shù)部分都小于最小位數(shù),所以都補0。
如果把456.7替換成123123456.78911,則輸出的結(jié)果是:3,123,456.789。
因為整數(shù)部分和小數(shù)部分都大于最大位數(shù),所以多出部分都被舍棄了。
11.4.2轉(zhuǎn)換數(shù)字
前面介紹的<fmt:formatNumber>標簽的作用是把一個數(shù)字或者貨幣按照一定的格式顯示,主要用于輸出。有時候,需要把用戶輸入的信息轉(zhuǎn)換成數(shù)字,而用戶可能是按照某種特定的格式輸入的。把輸入信息轉(zhuǎn)換成數(shù)字,可以使用<fmt:parseNumber>標簽。該標簽的基本格式如下:
<fmt:parseNumbervalue=“格式化字符串”
[type=“{number|currency|percent}”]
[pattern=“格式”]
[parseLocale=“parseLocale”]
[integerOnly=“{true|false}”]
[var=“變量名”]
[scope="{page|request|session|application}"]
/>
value屬性指出需要轉(zhuǎn)換成數(shù)字的格式化字符串。type指出數(shù)字的類型,可選的類型是數(shù)字、貨幣和百分數(shù),默認是數(shù)字。pattern屬性指出字符串的格式。parseLocale指出轉(zhuǎn)換所使用的Locale。integerOnly屬性指定是否僅僅解析給定值的整數(shù)部分。var屬性可以指定一個變量保存轉(zhuǎn)換后的結(jié)果,如果沒有var屬性,則轉(zhuǎn)換后的結(jié)果將直接顯示。scope指出變量的作用范圍。
11.5日期的格式化
11.5.1格式化日期
在很多應用中都需要根據(jù)特定的格式輸出日期,在標準標簽庫的格式化標簽庫中提供了<fmt:formatDate>標簽用于完成日期的格式化。該標簽的基本格式如下:
<fmt:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年商場食品安全事故應急演練實施方案
- 2025年醫(yī)療廢棄物無害化處理中心建設與可持續(xù)發(fā)展分析報告
- 2026年汽車維修技師筆試與實操預測模擬題
- 2026年甘肅省隴南市徽縣恒輝學校招聘備考題庫完整答案詳解
- 2026年濱州市鄒平市事業(yè)單位公開招聘人員備考題庫(45人)及答案詳解(易錯題)
- 2026山東臨沂市蘭山區(qū)部分事業(yè)單位招聘綜合類崗位工作人員28人備考題庫及答案詳解參考
- 2026廣西貴港市高新技術應用研究所招募就業(yè)見習人員1人備考題庫及完整答案詳解
- 2026江西省某國企招聘勞務派遣工程師4人備考題庫及完整答案詳解1套
- 2026云南昭通市永善縣委老干部服務中心招聘公益性崗位1人備考題庫及完整答案詳解一套
- 2026內(nèi)蒙古鄂爾多斯市德方律師事務所招聘實習律師及助理備考題庫及參考答案詳解1套
- 換電柜維護培訓課件
- 土石方工程掛靠合同
- 招聘會會展服務投標方案(技術標 )
- 企業(yè)標準-格式模板
- 軟件售后服務人員提成方案附表
- 五年級上冊道德與法治期末測試卷新版
- 友達光電(昆山)有限公司第一階段建設項目環(huán)保“三同時”執(zhí)行情況報告
- 建筑材料進場報告
- YY/T 1543-2017鼻氧管
- YS/T 903.1-2013銦廢料化學分析方法第1部分:銦量的測定EDTA滴定法
- GB/T 9414.9-2017維修性第9部分:維修和維修保障
評論
0/150
提交評論