- 内容提要
- 作者简介
- 译者简介
- 前言
- HTTP
- Servlet 和 JSP
- 下载 Spring 或使用 STS 与 Maven/Gradle
- 手动下载 Spring
- 使用 STS 和 Maven/Gradle
- 下载 Spring 源码
- 本书内容简介
- 下载示例应用
- 第 1 章Spring 框架
- 第 2 章模型 2 和 MVC 模式
- 第 3 章Spring MVC 介绍
- 第 4 章基于注解的控制器
- 第 5 章数据绑定和表单标签库
- 第 6 章转换器和格式化
- 第 7 章验证器
- 第 8 章表达式语言
- 第 9 章JSTL
- 第 10 章国际化
- 第 11 章上传文件
- 第 12 章下载文件
- 第 13 章应用测试
- 附录 A Tomcat
- 附录 B Spring Tool Suite 和 Maven
- 附录 C Servlet
- 附录 D JavaServer Pages
- 附录 E 部署描述符
9.6 格式化行为
JSTL 提供了格式化和解析数字与日期的标签,它们是 formatNumber、formatDate、timeZone、setTimeZone、parseNumber 和 parseDate。
9.6.1 formatNumber 标签
formatNumber 用于格式化数字。你可以根据需要,利用这个标签的各种属性来获得自己想要的格式。formatNumber 的语法有两种形式。第一种形式没有 body content:
< fmt:formatNumber value="numericValue"
[type="{number |currency|percent}"] [pattern="customPattern"] [currencyCode="currencyCode"] [currencySymbol="currencySymbol"] [groupingUsed="{true|false}"] [maxIntegerDigits="maxIntegerDigits"] [minIntegerDigits="minIntegerDigits"] [maxFractionDigits="maxFractionDigits"] [minFractionDigits="minFractionDigits"] [var="varName"] [scope="{page|request|session|application}"] />第二种形式有 body content:
< fmt:formatNumber [type="{number |currency|percent}"] [pattern="customPattern"] [currencyCode="currencyCode"] [currencySymbol="currencySymbol"] [groupingUsed="{true|false}"] [maxIntegerDigits="maxIntegerDigits"] [minIntegerDigits="minIntegerDigits"] [maxFractionDigits="maxFractionDigits"] [minFractionDigits="minFractionDigits"] [var="varName"] [scope="{page|request|session|application}"]> numeric value to be formatted < /fmt:formatNumber>body content 是 JSP。formatNumber 标签的属性见表 9.8。
表 9.8 formatNumber 标签的属性
属性 | 类型 | 描述 |
|---|---|---|
value+ | 字符串或数字 | 要格式化的数值 |
type+ | 字符串 | 说明该值是要被格式化成数字、货币,还是百分比。这个属性值如下:number、currency 和 percent |
pattern+ | 字符串 | 定制格式化样式 |
currencyCode+ | 字符串 | ISO 4217 码,见表 9.9 |
currencySymbol+ | 字符串 | 货币符号 |
groupingUsed+ | 布尔 | 说明输出结果中是否包含组分隔符 |
maxIntegerDigits+ | 整数 | 规定输出结果的整数部分最多几位数字 |
minIntegerDigits+ | 整数 | 规定输出结果的整数部分最少几位数字 |
maxFractionDigits+ | 整数 | 规定输出结果的小数部分最多几位数字 |
minFractionDigits+ | 整数 | 规定输出结果的小数部分最少几位数字 |
var | 字符串 | 将输出结果存为字符串的有界变量名称 |
scope | 字符串 | var 的范围。如果有 scope 属性,则必须指定 var 属性 |
formatNumber 标签的用途之一就是将数字格式化成货币。为此,可以利用 currencyCode 属性来定义一个 ISO 4217 货币代码。部分 ISO 4217 货币代码见表 9.9。
表 9.9 部分 ISO 4217 货币代码
币别 | ISO 4217 码 | 大单位名称 | 小单位名称 |
|---|---|---|---|
加拿大元 | CAD | 加元 | 分 |
人民币 | CNY | 元 | 角 |
欧元 | EUR | 欧元 | 分 |
日元 | JPY | 日元 | 钱 |
英镑 | GBP | 英镑 | 便士 |
美元 | USD | 美元 | 美分 |
FormatNumber 标签的用法范例见表 9.10。
表 9.10 formatNumber 标签的用法范例
行为 | 结果 |
|---|---|
<fmt:formatNumber value="12" type="number"/> | 12 |
<fmt:formatNumber value="12" type="number"minIntegerDigits="3"/> | 012 |
<fmt:formatNumber value="12" type="number" minFractionDigits="2"/> | 12.00 |
<fmt:formatNumber value="123456.78" pattern=".000"/> | 123456.780 |
<fmt:formatNumber value="123456.78" pattern="#,#00.0#"/> | 123,456.78 |
<fmt:formatNumber value="12" type="currency"/> | $12.00 |
<fmt:formatNumber value="12" type="currency" currencyCode="GBP"/> | GBP 12.00 |
<fmt:formatNumber value="0.12" type="percent"/> | 12% |
<fmt:formatNumber value="0.125" type="percent"minFractionDigits="2"/> | 12.50% |
注意,在格式化货币时,如果没有定义 currencyCode 属性,就无法使用浏览器的本地化。
9.6.2 formatDate 标签
formatDate 标签用于格式化日期,其语法如下:
< fmt:formatDate value="date"
[type="{time|date|both}"]
[dateStyle="{default|short|medium|long|full}"]
[timeStyle="{default|short|medium|long|full}"]
[pattern="customPattern"]
[timeZone="timeZone"]
[var="varName"]
[scope="{page|request|session|application}"]
/>body content 为 JSP。formatDate 标签的属性见表 9.11。
表 9.11 formatDate 标签的属性
属性 | 类型 | 描述 |
|---|---|---|
value+ | java.util.Date | 要格式化的日期和/或时间 |
type+ | 字符串 | 说明要格式化的是时间、日期,还是时间与日期部分都格式化 |
dataStyle+ | 字符串 | 预定义日期的格式化样式,遵循 java.text.DateFormat 中定义的语义 |
timeStyle+ | 字符串 | 预定义时间的格式化样式,遵循 java.text.DateFormat 中定义的语义 |
pattern+ | 字符串 | 定制格式化样式 |
timezone+ | 字符串或 java.util.TimeZone | 定义用于显示时间的时区 |
var | 字符串 | 将输出结果存储为字符串的有界变量名称 |
scope | 字符串 | var 的范围 |
timeZone 属性的可能值,请查看 9.6.3 小节。
下列代码利用 formatDate 标签格式化有界变量 now 引用的 java.util.Date 对象。
Default: <fmt:formatDate value="${now}"/>
Short: <fmt:formatDate value="${now}" dateStyle="short"/>
Medium: <fmt:formatDate value="${now}" dateStyle="medium"/>
Long: <fmt:formatDate value="${now}" dateStyle="long"/>
Full: <fmt:formatDate value="${now}" dateStyle="full"/>下面的 formatDate 标签用于格式化时间:
Default: <fmt:formatDate type="time" value="${now}"/>
Short: <fmt:formatDate type="time" value="${now}"
timeStyle="short"/>
Medium: <fmt:formatDate type="time" value="${now}"
timeStyle="medium"/>
Long: <fmt:formatDate type="time" value="${now}" timeStyle="long"/>
Full: <fmt:formatDate type="time" value="${now}" timeStyle="full"/>下面的 formatDate 标签用于格式化日期和时间:
Default: <fmt:formatDate type="both" value="${now}"/>
Short date short time: <fmt:formatDate type="both"
value="${now}" dateStyle="short" timeStyle="short"/>
Long date long time format: <fmt:formatDate type="both"
value="${now}" dateStyle="long" timeStyle="long"/>下面的 formatDate 标签用于格式化带时区的时间:
Time zone CT: <fmt:formatDate type="time" value="${now}"
timeZone="CT"/><br/>
Time zone HST: <fmt:formatDate type="time" value="${now}"
timeZone="HST"/><br/>下面的 formatDate 标签利用定制模式来格式化日期和时间:
<fmt:formatDate type="both" value="${now}" pattern="dd.MM.yy"/>
<fmt:formatDate type="both" value="${now}" pattern="dd.MM.yyyy"/>9.6.3 timeZone 标签
timeZone 标签用于定义时区,使其 body content 中的时间信息按指定时区进行格式化或者解析。其语法如下:
< fmt:timeZone value="timeZone">
body content
< /fmt:timeZone>body content 是 JSP。属性值可以是类型为 String 或者 java.util.TimeZone 的动态值。美国和加拿大时区的值见表 9.12。
如果 value 属性为 null 或者 empty,则使用 GMT 时区。
下面的范例用 timeZone 标签格式化带时区的日期。
<fmt:timeZone value="GMT+1:00">
<fmt:formatDate value="${now}" type="both"
dateStyle="full" timeStyle="full"/>
</fmt:timeZone>
<fmt:timeZone value="HST">
<fmt:formatDate value="${now}" type="both"
dateStyle="full" timeStyle="full"/>
</fmt:timeZone>
<fmt:timeZone value="CST">
<fmt:formatDate value="${now}" type="both"
dateStyle="full" timeStyle="full"/>
</fmt:timeZone>表 9.12 美国和加拿大时区的值
缩写 | 全名 | 时区 |
|---|---|---|
NST | 纽芬兰标准时间 | UTC-3:30 |
NDT | 纽芬兰夏时制 | UTC-2:30 |
AST | 大西洋标准时间 | UTC-4 |
ADT | 大西洋夏时制 | UTC-3 |
EST | 东部标准时间 | UTC-5 |
EDT | 东部夏时制 | UTC-4 |
ET | 东部时间,如 EST 或 EDT | * |
CST | 中部标准时间 | UTC-6 |
CDT | 中部夏时制 | UTC-5 |
CT | 中部时间,如 CST 或 CDT | * |
MST | 山地标准时间 | UTC-7 |
MDT | 山地夏时制 | UTC-6 |
MT | 山地时间,如 MST 或 MDT | * |
PST | 太平洋标准时间 | UTC-8 |
PDT | 太平洋夏时制 | UTC-7 |
PT | 太平洋时间,如 PST 或 PDT | * |
AKST | 阿拉斯加标准时间 | UTC-9 |
AKDT | 阿拉斯加夏时制 | UTC-8 |
HST | 夏威夷标准时间 | UTC-10 |
9.6.4 setTimeZone 标签
setTimeZone 标签用于将指定时区保存在一个有界变量或者时间配置变量中。setTimeZone 的语法如下:
< fmt:setTimeZone value="timeZone" [var="varName"]
[scope="{page |request|session|application}"] />表 9.13 展示了 setTimeZone 标签的属性。
表 9.13 setTimeZone 标签的属性
属性 | 类型 | 描述 |
|---|---|---|
value+ | 字符串或 java.util.TimeZone | 时区 |
var | 字符串 | 保存类型为 java.util.TimeZone 的时区的有界变量 |
scope | 字符串 | var 的范围或者时区配置变量 |
9.6.5 parseNumber 标签
parseNumber 标签用于将以字符串表示的数字、货币或者百分比解析成数字。其语法有两种形式。第一种形式没有 body content:
< fmt:parseNumber value="numericValue"
[type="{number |currency|percent}"] [pattern="customPattern"] [parseLocale="parseLocale"] [integerOnly="{true|false}"] [var="varName"] [scope="{page|request|session|application}"] />第二种形式有 body content:
< fmt:parseNumber [type="{number |currency|percent}"] [pattern="customPattern"] [parseLocale="parseLocale"] [integerOnly="{true|false}"] [var="varName"] [scope="{page|request|session|application}"]> numeric value to be parsed < /fmt:parseNumber>body content 是 JSP。parseNumber 标签的属性见表 9.14。
下面的 parseNumber 标签就是解析有界变量 quantity 引用的值,并将结果保存在有界变量 formattedNumber 中。
<fmt:parseNumber var="formattedNumber" type="number"
value="${quantity}"/>表 9.14 parseNumber 标签的属性
属性 | 类型 | 描述 |
|---|---|---|
value+ | 字符串或数字 | 要解析的字符串 |
type+ | 字符串 | 说明该字符串是要解析成数字、货币,还是百分比 |
pattern+ | 字符串 | 定制格式化样式,决定 value 属性中的字符串要如何解析 |
parseLocale+ | 字符串或者 java.util.Locale | 定义 locale,在解析操作期间将其默认格式化样式或将 pattern 属性定义的样式应用其中 |
integerOnly+ | 布尔 | 说明是否只解析指定值的整数部分 |
var | 字符串 | 保存输出结果的有界变量名称 |
scope | 字符串 | var 的范围 |
9.6.6 parseDate 标签
parseDate 标签以区分地域的格式解析以字符串表示的日期和时间。其语法有两种形式。第一种形式没有 body content:
< fmt:parseDate value="dateString"
[type="{time|date |both}"] [dateStyle="{default|short|medium|long|full}"] [timeStyle="{default|short|medium|long|full}"] [pattern="customPattern"] [timeZone="timeZone"] [parseLocale="parseLocale"] [var="varName"] [scope="{page|request|session|application}"] />第二种形式有 body content:
< fmt:parseDate [type="{time|date |both}"] [dateStyle="{default|short|medium|long|full}"] [timeStyle="{default|short|medium|long|full}"] [pattern="customPattern"] [timeZone="timeZone"] [parseLocale="parseLocale"] [var="varName"] [scope="{page|request|session|application}"]> date value to be parsed < /fmt:parseDate>body content 是 JSP。表 9.15 列出了 parseDate 标签的属性。
表 9.15 parseDate 标签的属性
属性 | 类型 | 描述 |
|---|---|---|
value+ | 字符串 | 要解析的字符串 |
type+ | 字符串 | 说明要解析的字符串中是否包含日期、时间或二者均有 |
dateStyle+ | 字符串 | 日期的格式化样式 |
timeStyle+ | 字符串 | 时间的格式化样式 |
pattern+ | 字符串 | 定制格式化样式,决定要如何解析该字符串 |
timeZone+ | 字符串或者 java.util.TimeZone | 定义时区,使日期字符串中的时间信息均根据它来解析 |
parseLocale+ | 字符串或者 java.util.Locale | 定义 locale,在解析操作期间用其默认格式化样式,或将 pattern 属性定义的样式应用其中 |
var | 字符串 | 保存输出结果的有界变量名称 |
scope | 字符串 | var 的范围 |
下面的 parseDate 标签用于解析有界变量 myDate 引用的日期,并将得到的 java.util.Date 保存在一个页面范围的有界变量 formattedDate 中。
<c:set var="myDate" value="12/12/2005"/>
<fmt:parseDate var="formattedDate" type="date"
dateStyle="short" value="${myDate}"/>绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论