JSTL标签提供了对国际化(I18N)的支持,它可以根据发出请求的客户端地域的不同来显示不同的语言。同时还提供了格式化数据和日期的方法。实现这些功能需要I18N格式标签库(I18N-capable formation tags liberary)。引入该标签库的方法为:
I18N格式标签库提供了11个标签,这些 标签从功能上可以划分为3类如下:
(1)数字日期格式化。formatNumber标签、formatData标签、parseNumber标签、parseDate标签、timeZone标签、setTimeZone标签。
(2)读取消息资源。bundle标签、message标签、setBundle标签。
(3)国际化。setlocale标签、requestEncoding标签。
接下将详细介绍这些标签的功能和使用方式。
9.3.1 数字日期格式化
数字日期格式化标签共有6个,用来将数字或日期转换成设定的格式。
1.标签
该标签依据特定的区域将数字改变为不同的格式来显示。
【语法1】:
[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】:
[pattern=”pattern”]
[currencyCode=”code”]
[currencySymbol=”symbol”]
[groupingUsed=”true|false”]
[maxIntergerDigits=”maxDigits”]
[minIntergerDigits=”minDigits”]
[maxFractionDigits=”maxDigits”]
[minFractionDigits=”minDigits”]
[var=”name”]
[scope=page|request|session|application]
>
标签参数说明:
名称
说明
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%
【示例代码】:实现了对数字的格式化、货币的格式、货币的格式化。使用的各种属性的设定。
类型 | 使用数据 | 结果 | 说明 |
数字格式化 | 108.75 | 108.75 | 使用pattern可以定义显示的样式。本例设定为###.#小数部分将使用四舍五入法。 |
数字格式化 | 9557 | 9557 | 使用科学计数法。 |
数字格式化 | 9557 | 9557 | 使用默认分组。 |
数字格式化 | 9557 | 9557 | 不使用分组。 |
数字格式化 | 9557 | 9557 | 使用位数限定,根据指定的位数显示,其他数字忽略。例如:9不被显示。 |
百分比格式化 | 0.98 | 0.98 | 用百分比形式显示一个数据。 |
货币格式化 | 188.88 | 188.8 | 将一个数据转化为货币形式输出。 |
存储数据 | 188.88 | 188.8 | 存储的money的值为${money} |
【代码说明】:
(1)从应用角度可以把属性分为三类:数字格式化、货币格式化、百分比格式化。使用type指定类型。
(2)应用于数字格式化的属性有:partten属性、maxIntegerDigits属性、minIntegerDigits属性、maxFractionDigits属性和minFactionDigits属性。其中partten属性在设定格式化样式时会比较准确如:四舍五入、科学计数法的使用。而使用maIntegerDirgits等属性时,只把设定位数以外的数字舍去。
(3)货币格式化可以使用数字格式化的所有属性。如果有必要建议使用partten属性。currencyCode属性和currencySymbol只用于货币格式化。
(4)百分比格式化使用到的属性为type属性、partten属性,设定type属性的类型为percent即可。
(5)使用var属性时,会将格式化后的值存在JSP的某个范围内(一个String类型的字符串包括符号等)。将不再输出格式化后的值可以使用EL表达式输出。
(6)通用属性:type属性、partten属性、var属性和scope属性。
2.标签
将格式化后的数字、货币、百分比都转化为数字类型。
【语法1】:
[pattern=”pattern”]
[parseLocale=”locale”]
[intergerOnly=”true|false”]
[scope=”page|request|session|application”]
/>
【语法2】:
[pattern=”pattern”]
[parseLocale=”locale”]
[intergerOnly=”true|false”]
[scope=”page|request|session|application”]
>
Number
标签参数说明:
名称
说明
EL
类型
是否必须
默认值
value
被解析的字符串
是
String
是
无
type
指定单位(数字、货币、百分比)
是
String
是
number
pattern
格式样式
是
String
否
无
parseLocale
用来替代默认区域的设定
是
String,
Java.util.
Locale
是
默认本地样式
var
存储已经格式化的数据
否
String
否
无
scope
var变量的作用域
否
String
是
page
可以看作是的逆运算。相应的参数和类型的配置和使用格式化时相同。
【示例代码】:实现了从字符串中提取数据,并用合适的数据类型进行存储(浮点性、整型等)。可以对转换后的数据进行加法运算。
188.8
格式化前的数据为:${money}
格式化后的数据为:可以对格式化的后的数据进行运算:对百分比进行格式化98%为:98%
【代码解析】:
(1)首先使用将188.8转换为字符串¥188.8并在page范围内存储一个String类型的变量,变量名为money。
(2)使用将¥188.8转化为浮点型的数据188.8并赋值为变量money,
则变量money转变为一个浮点型的值188.8,对188.8进行加运算。
(3)直接对一个百分比数98%进行转化。
3.标签
该标签主要用来格式化日期和时间。
【语法】:
[pattern=”pattern”]
[dateStyle=”default|short|medium|long|full”]
[timeStyle=”default|short|medium|long|full”]
[timeZone=”timeZone”]
[var=”name”]
[scope=”page|request|session|application”]
/>
标签属性说明:
属性名
说明
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等属性。
timeStyle="default">
timeStyle="short">
timeStyle="long">
timeStyle="full">
timeStyle="full">
【代码解析】:
(1)首先通过配置JavaBean在页面上实例化java.util.Date对象。实现代码如下:
(2)对日期对象进行格式化时${date}是一个日期对象,如果给value设的值为String时程序会报错。
(3)设置type为both时,将显示日期和时间,同时示例中依次改变dateStyle和timeStyle的值作为比较。
4.标签
标签主要将字符串类型的时间或日期转化为时间或日期对象。
【语法1】:
[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】:
[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
标签属性说明:
属性名
说明
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
【示例代码】:实现了以下功能:首先,使用了把一个日期对象格式化成一个日期的字符串,并把该字符串以参数名为a存储page范围内。其次,使用方法把a的值(字符串)格式化成一个Date并以参数名为b存储在page范围内。最后,使用Java脚本证明生成的b为对象。
dateStyle="full" timeStyle="full">
${a}
out.println(pageContext.getAttribute("b").toString());
out.println("
");
out.println(pageContext.getAttribute("b").hashCode());
%>