JSTL格式化标签详解

JSTL格式化标签又称为I18N标签库,主要用来编写国际化的WEB应用,使用此功能可以对一个特定的语言请求做出合适的处理。例如:中国内地用户将显示简体中文,台湾地区则显示繁体中文,使用I18N格式化标签库还可以格式化数字和日期,例如同一数字或日期,在不同国家可能有不同的格式,使用I18N格式标签库可以将数字和日期格式为当地的格式。

1、概述

JSTL格式化标签又称为I18N标签库,主要用来编写国际化的WEB应用,使用此功能可以对一个特定的语言请求做出合适的处理。

例如:中国内地用户将显示简体中文,台湾地区则显示繁体中文,使用I18N格式化标签库还可以格式化数字和日期,例如同一数字或日期,在不同国家可能有不同的格式,使用I18N格式标签库可以将数字和日期格式为当地的格式。

在JSP页面中要使用到格式化标签,需要引入下面的语句:

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

2、标签概览

格式化标签:

<fmt:fromatNumber>
<fmt:formatDate>
<fmt:parseDate>
<fmt:parseNumber>
<fmt:setTimeZone>
<fmt:timeZone>

国际化标签:

<fmt:setLocale>
<fmt:requestEncoding>
<fmt:bundle>
<fmt:message>
<fmt:param>
<fmt:setBundle>

 

3、<fmt:formatNumber>标签

此标签会根据区域定制的方式将数字格式化成数字,货币,百分比。

标签属性:

属性名

数据类型

功能描述

默认值

value


要格式化的数字


type


按照什么类型格式化

number

pattern


自定义格式化样式


currencyCode


货币代码,只适用于按照货币格式化的数字(ISO-4721)


currencySymbol


货币符号,如¥,只适用于按照货币格式化的数字


groupingUsed


是否包含分隔符


maxIntegerDigits


整数部分最多显示多少位


mixIntegerDigits


整数部分最少显示多少位


maxFractionDigits


小数部分最多显示多位位


minFractionDigits


小数部分最少显示多位位


var


存储格式化后的结果


scope


存储的范围


type属性的可选值:

名称

类型

描述

number


数字

currency


货币

percent


百分比

实例: 

a、用不同的区域格式化数字

<fmt:setLocale value="fr_fr" />     
<fmt:formatNumber value="123456789.012" />     
<br />     
<fmt:setLocale value="zh_cn" />     
<fmt:formatNumber value="123456789.012" />     
<br />     
<fmt:setLocale value="de_de" />     
<fmt:formatNumber value="123456789.012" />

结果:

123 456 789,012 

123,456,789.012 

123.456.789,012 

注意:如果要实现国际化,那么编码格式要设置为utf-8。从程序运行效果可以看出,设定的区域不同,格式化数字的显示也会不同。

b、测试type属性的值

<fmt:setLocale value="zh_cn" />  
<fmt:formatNumber value="0.3" type="number" /><br />     
<fmt:formatNumber value="0.3" type="currency" /><br />     
<fmt:formatNumber value="0.3" type="percent" /><br />

结果:

0.3

¥0.30

30%

currencyCode为货币代码,例如美元为USD,人民币为CNY等。currencySymbol为货币符号例如,人民币为¥、美元为$。如果不指定区域,则会根据语言区域自动选择currencySymbol

c、使用货币形式对不同区域进行格式化操作 

<fmt:setLocale value="zh_cn"/>  
<fmt:formatNumber value="0.3" type="currency" /><br />  
<fmt:setLocale value="en_Us" />  
<fmt:formatNumber value="0.3" type="currency" /><br />

结果:

¥0.30

$0.30

d、自定义currentcySymbol标识符

currencySymbol 属性还可以自定义要显示的头标识,但是type="currency"才会生效。例如:

<fmt:setLocale value="zh_cn"/>     
<fmt:formatNumber value="0.3" type="currency" currencySymbol="#"/><br />     
<fmt:setLocale value="en_Us"/>     
<fmt:formatNumber value="0.3" type="currency" currencySymbol="#"/><br />

结果:

#0.30

@0.30

e、自定义数字样式

<fmt:formatNumber value="12.31" pattern=".0000"/><br/>  
<fmt:formatNumber value="1234" pattern="###.##E0"/>

结果:

12.3100

1.234E3

 

4、<fmt:parseNumber>标签

此标签用来将字符串类型的数字、货币或百分比转换成数字类型,与<fmt:formatNumber>标签的作用正好相反。

标签属性:

属性名称

类型

功能描述

默认值

value 


要转换的字符串


type


指定要转换的字符串为什么类型

number

pattern


自定义格式化样式


parseLocale


指定区域来转换字符串


IntegerOnly


转换后的数字是否只显示整数部分


var


存储转换后的结果


scope


存储的范围


 

type属性的可选值:

名称

类型

描述

number

String

数字

currency

String

货币

percent

String

百分比

 

实例:

a、将数字字符串解析成数字

<fmt:parseNumber value="500,800,200"/>

结果:

500800200

b、将百分比字符串转换成百分比

<fmt:parseNumber value="52%" type="percent" />

结果:

0.52  (52%在这里是一个字符串, type指定这个字符串是什么类型的值)

c、将货币字符串转换成货币数字

<fmt:parseNumber value="¥123" type="currency" />

结果:

123  (¥123在这里是一个字符串, type指定这个字符串是什么类型的值)

d、指定只显示整数部分的值

<fmt:parseNumber value="123.333" type="number" /><br/>  
<fmt:parseNumber value="123.333" type="number"  integerOnly="true"/><br/>

结果:

123.333

123

e、指定转换的区域

<fmt:parseNumber value="¥123.333" type="currency" parseLocale="zh_CN"/><br/>  
<fmt:parseNumber value="$123.333" type="currency" parseLocale="en_US"/><br/>

结果:

123.333

123.333

parseLocale="en_US"主要是配合当type="currency"时用。如果要转换货币的字符串类型为value="¥123.333",不设置语言环境的话,会取当前浏览器的默认设置,否则就要加上parseLocale="zh_CN" 指定环境为中文环境。如果要转换货币的字符串类型为value="$123.333",不设置语言环境的话,会取当前浏览器的默认设置。如果默认为zh_cn的话,程序会报错的;否则就要加上parseLocale="en_US"指定环境为英文美国环境。

5、<fmt:formatDate/>标签

此标签可以将日期格式化。

标签属性:

属性名称

类型

功能描述

默认值

value


用来格式化的时间或日期


type


指定格式化的是日期还是时间或者两者都是取值范围

date

pattern


自定义格式化样式


dateStyle


日期的格式化样式


timeStyle 


时间的格式化样式


timeZone 


指定使用的时区


var 


存储格式化后的结果


scope 


指定存储的范围



type可取值意义:

名称

类型

描述

date

String

格式化日期

time

String

格式化时间

both

String

格式化日期和时间


dateStyle可取值意义:

名称

类型

描述

default

String

YYYY-MM-DD HH:MM:SS

short

String

YY-MM-DD HH:MM:SS

medium

String

YYYY-MM-DD HH:MM:SS

long

String

YYYY年MM月DD日 HH:MM:SS

full 

String

YYYY年MM月DD日 星期* HH:MM:SS

 

timeStyle可取值意义:

名称

类型

描述

default

String

YYYY-MM-DD HH:MM:SS

short

String

YYYY-MM-DD 上午 HH:MM

medium

String

YYYY-MM-DD HH:MM:SS

long

String

YYYY-MM-DD 上午 HH时MM分SS秒

full 

String

YYYY-MM-DD 上午 HH时MM分SS秒 时区

实例:

a、自定义格式

<fmt:setLocale value="zh_cn" />     
<fmt:formatDate value="<%=new Date()%>" type="both" pattern="yyyy/MM/dd hh:mm:ss" />     
<br />  
<fmt:formatDate value="<%=new Date()%>" type="both" pattern="yyyy-MM-dd HH:mm:ss" />     
<br />  
<fmt:formatDate value="<%=new Date()%>" type="both" pattern="yyyy年MM月dd日 hh小时mm分钟ss秒" />     
<br />  
<fmt:formatDate value="<%=new Date()%>" type="both" pattern="yy/MM/dd hh:mm:ss" />     
<br />

结果:

2014/02/08 10:19:42 

2014-02-08 10:19:42 

2014年02月08日 10小时19分钟42秒 

14/02/08 10:19:42 

注意:这里小时 hh表示12小时制, HH代表24小时制

b、格式不同区域日期

<fmt:setLocale value="zh_cn" />     
<fmt:formatDate value="<%=new Date()%>" />     
<br />     
<fmt:setLocale value="zh_tw" />     
<fmt:formatDate value="<%=new Date()%>" />

大家可以看到大陆和台湾显示日期的格式是有区别的。

结果:

2009-12-7 

2009/12/7

c、格式化不同区域的时间

<fmt:setLocale value="zh_cn" />     
<fmt:formatDate value="<%=new Date()%>" type="time"/>     
<br />     
<fmt:setLocale value="zh_tw" />     
<fmt:formatDate value="<%=new Date()%>" type="time"/>

结果:

14:59:28 

下午 02:59:28

d、设置格式化日期格式的样式 

<fmt:setLocale value="zh_cn" />     
<fmt:formatDate value="<%=new Date()%>" type="both" dateStyle="default" />     
<br />     
<fmt:formatDate value="<%=new Date()%>" type="both" dateStyle="short" />     
<br />     
<fmt:formatDate value="<%=new Date()%>" type="both" dateStyle="medium" />     
<br />     
<fmt:formatDate value="<%=new Date()%>" type="both" dateStyle="long" />     
<br />     
<fmt:formatDate value="<%=new Date()%>" type="both" dateStyle="full" />     
<br />

结果:

2009-12-7 21:30:49 

09-12-7 21:30:49 

2009-12-7 21:30:49 

2009年12月7日 21:30:49 

2009年12月7日 星期一 21:30:49

e、设置格式化时间格式样式  

<fmt:setLocale value="zh_cn" />     
<fmt:formatDate value="<%=new Date()%>" type="both"    timeStyle="default" />     
<br />     
<fmt:formatDate value="<%=new Date()%>" type="both" timeStyle="short" />     
<br />     
<fmt:formatDate value="<%=new Date()%>" type="both" timeStyle="medium" />     
<br />     
<fmt:formatDate value="<%=new Date()%>" type="both" timeStyle="long" />     
<br />     
<fmt:formatDate value="<%=new Date()%>" type="both" timeStyle="full" />     
<br />

结果:

2009-12-7 21:35:52 

2009-12-7 下午9:35 

2009-12-7 21:35:52 

2009-12-7 下午09时35分52秒 

2009-12-7 下午09时35分52秒 CST

6、<fmt:parseDate>标签

将字符串类型的时间转换为日期类型。

标签属性:

属性名称

类型

功能描述

默认值

value 

String

用来格式化的时间或日期的字符串


type 


指定格式化的是日期还是时间,或者两者都是取值范围date,time,both


pattern


自定义格式化样式


dateStyle


日期的格式化样式(见<fmt:formatDate>)


timeStyle


时间的格式化样式(见<fmt:formatDate>)


timeZone


指定使用的时区


var 


存储格式化后的结果


scope 


指定存储的范围


实例:

<fmt:setLocale value="zh_cn" />  
<fmt:parseDate type="date" value="2008-4-5"/>

结果:

Sat Apr 05 00:00:00 CST 2008

这里已经将字符串” 2008-4-5”转换为了日期对象了。转换一定得注意,类似于2008-4-5这样的字符串,type必须为date;类似于12:34:56的字符串,type必须为time;类似于2008-4-5 12:34:56这样的字符串,type必须为both;还要注意浏览器的语言环境的设置,如果为zh_tw,那么字符串就必须得符合当地的标准;如为2009/12/7 下午 09:24:26就正确转换为日期对象,否则就会报错。

7、<fmt:setTimeZone>标签

该标签用来指定时区,影响该标签后面定义的标签,知道下一个<fmt:setTimeZone>标签。

标签属性:

属性名称

类型

功能描述

默认值

value 


设定时区


var 


存储设定的时区


scope 


存储的范围


value用来设定时区,可以是EST、CST、MST、PST等;如果有var属性,则将结果存储在所设定的范围之内。在属性范围内的页面都会使用该时区为默认时区。     

实例:

<fmt:setLocale value="zh_cn" />     
<fmt:setTimeZone value="EST" />     
<fmt:formatDate value="<%=new Date()%>" type="time" timeStyle="full" /><br />     
<fmt:formatDate value="<%=new Date()%>" type="time" timeStyle="full" /><br />     
<fmt:formatDate value="<%=new Date()%>" type="time" timeStyle="full" /><br />

结果:

上午09时25分12秒 EST

上午09时25分12秒 EST

上午09时25分12秒 EST

此时区在该页面内都有效

8、<fmt:timeZone>标签

用来暂时设置时区。 此标签的时区只是部分,在标签开始至标签结束内有效;其它地方无效,,其它地方还是会使用默认时区。 

实例: 

<fmt:setLocale value="zh_cn" />     
<fmt:timeZone value="EST">     
    <fmt:formatDate value="<%=new Date()%>" type="time" timeStyle="full" />     
    <br />     
    <fmt:formatDate value="<%=new Date()%>" type="time" timeStyle="full" />     
    <br />     
</fmt:timeZone>     
<fmt:formatDate value="<%=new Date()%>" type="time" timeStyle="full" />

结果:

下午09时52分16秒 EST 

下午09时52分16秒 EST 

上午10时52分16秒 CST 

我们一定要给自己提出这样的任务:第一,学习,第二是学习,第三还是学习。 —— 列宁
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号