0x01 格式化标签
JSTL格式化标签用来格式化并输出文本、日期、时间、数字。引用格式化标签库的语法如下:<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
| 标签 |
描述 |
|
使用指定的格式或精度格式化数字 |
|
解析一个代表着数字,货币或百分比的字符串 |
|
使用指定的风格或模式格式化日期和时间 |
|
解析一个代表着日期或时间的字符串 |
|
绑定资源 |
|
指定地区 |
|
绑定资源 |
|
指定时区 |
|
指定时区 |
|
显示资源配置文件信息 |
|
设置request的字符编码 |
0x02 小例子
// 目录结构├── src│ └── main│ └── webapp│ └── com│ │ └── ...│ └── WEB-INF│ │ └── web.xml│ ├── ...│ └── JSTL库测试│ │ ├── ...
0x02.1
0x02.1.1 语法
<fmt:formatNumber> 标签用于格式化数字, 百分比, 货币
<fmt:formatNumber> 标签语法格式如下:<fmt:formatNumber value="<string>" type="<string>" pattern="<string>" currencyCode="<string>" currencySymbol="<string>" groupingUsed="<string>" maxIntegerDigits="<string>" minIntegerDigits="<string>" maxFractionDigits="<string>" minFractionDigits="<string>" var="<string>" scope="<string>"/>
| 标签有如下属性 |
|
|
|
| 属性 |
描述 |
必须 |
默认值 |
| value |
要显示的数字 |
是 |
无 |
| type |
NUMBER,CURRENCY,或 PERCENT类型 |
否 |
Number |
| pattern |
指定一个自定义的格式化模式用与输出 |
否 |
无 |
| currencyCode |
货币码(当type=”currency”时) |
否 |
取决于默认区域 |
| currencySymbol |
货币符号 (当 type=”currency”时) |
否 |
取决于默认区域 |
| groupingUsed |
是否对数字分组 (TRUE 或 FALSE) |
否 |
true |
| maxIntegerDigits |
整型数最大的位数 |
否 |
无 |
| minIntegerDigits |
整型数最小的位数 |
否 |
无 |
| maxFractionDigits |
小数点后最大的位数 |
否 |
无 |
| minFractionDigits |
小数点后最小的位数 |
否 |
无 |
| var |
存储格式化数字的变量 |
否 |
Print to page |
| scope |
var属性的作用域 |
否 |
page |
如果type属性为percent或number那么可以使用其它几个格式化数字属性maxIntegerDigits属性和minIntegerDigits属性允许您指定整数的长度,若实际数字超过了maxIntegerDigits所指定的最大值,则数字将会被截断有一些属性允许您指定小数点后的位数,minFractionalDigits属性和maxFractionalDigits属性允许您指定小数点后的位数,若实际的数字超出了所指定的范围,则这个数字会被截断数字分组可以用来在每三个数字中插入一个逗号,groupingIsUsed属性用来指定是否使用数字分组,当与minIntegerDigits属性一同使用时,就必须要很小心地来获取预期的结果了我们或许会使用pattern属性,这个属性可以让您在对数字编码时包含指定的字符
| pattern属性 |
|
| 符号 |
描述 |
| 0 |
代表一位数字 |
| E |
使用指数格式 |
| # |
代表一位数字,若没有则显示 0,前导 0 和追尾 0 不显示。 |
| . |
小数点 |
| , |
数字分组分隔符 |
| ; |
分隔格式 |
| - |
使用默认负数前缀 |
| % |
百分数 |
| ? |
千分数 |
| ¤ |
货币符号,使用实际的货币符号代替 |
| X |
指定可以作为前缀或后缀的字符 |
| ‘ |
在前缀或后缀中引用特殊字符 |
0x02.1.2 小例子
// 文件地址: ./src/main/webapp/JSTL库测试/// 文件名称: jstl_fmt_formatnumber.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %><c:set var="balance" value="120000.2309"/><html><head> <title>jstl_fmt_formatnumber</title></head><body> <h3>数字格式化:</h3> <p>格式化数字(1): <fmt:formatNumber value="${balance}" type="currency"/></p> <p>格式化数字(2): <fmt:formatNumber type="number" maxIntegerDigits="3" value="${balance}"/></p> <p>格式化数字(3): <fmt:formatNumber type="number" maxFractionDigits="3" value="${balance}"/></p> <p>格式化数字(4): <fmt:formatNumber type="number" groupingUsed="false" value="${balance}"/></p> <p>格式化数字(5): <fmt:formatNumber type="percent" maxIntegerDigits="3" value="${balance}"/></p> <p>格式化数字(6): <fmt:formatNumber type="percent" minFractionDigits="10" value="${balance}"/></p> <p>格式化数字(7): <fmt:formatNumber type="percent" maxIntegerDigits="3" value="${balance}"/></p> <p>格式化数字(8): <fmt:formatNumber type="number" pattern="###.###E0" value="${balance}"/></p> <p>美元: <fmt:setLocale value="en_US"/> <fmt:formatNumber value="${balance}" type="currency"/></p></body></html>// 打开: http://127.0.0.1:8081/mavenJspTest_war/JSTL库测试/jstl_fmt_formatnumber.jsp

0x02.2
0x02.2.1 语法
<fmt:parseNumber>标签用来解析数字,百分数,货币
<fmt:parseNumber>语法格式如下:<fmt:parseNumber value="<string>" type="<string>" pattern="<string>" parseLocale="<string>" integerOnly="<string>" var="<string>" scope="<string>"/>
| 标签有如下属性 |
|
|
|
| 属性 |
描述 |
必须 |
默认值 |
| value |
要解析的数字 |
否 |
Body |
| type |
NUMBER, CURRENCY, 或 PERCENT |
否 |
number |
| parseLocale |
解析数字时所用的区域 |
否 |
默认区域 |
| integerOnly |
是否只解析整型数(true)或浮点数(false) |
否 |
false |
| pattern |
自定义解析模式 |
否 |
无 |
| timeZone |
要显示的日期的时区 |
否 |
默认时区 |
| var |
存储待解析数字的变量 |
否 |
Print to page |
| scope |
var属性的作用域 |
否 |
page |
pattern属性与<fmt:formatNumber>标签中的pattern有相同的作用在解析时,pattern属性告诉解析器期望的格式
0x02.2.2 小例子
// 文件地址: ./src/main/webapp/JSTL库测试/// 文件名称: jstl_fmt_parsenumber.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %><c:set var="balance" value="1250003.350"/><fmt:parseNumber var="i" type="number" value="${balance}"/><fmt:parseNumber var="j" integerOnly="true" type="number" value="${balance}"/><html><head> <title>jstl_fmt_parsenumber</title></head><body> <h3>数字解析:</h3> <p>数字解析(1): <c:out value="${i}"/></p> <p>数字解析(2): <c:out value="${j}"/></p></body></html>// 打开: http://127.0.0.1:8081/mavenJspTest_war/JSTL库测试/jstl_fmt_parsenumber.jsp

0x02.3
0x02.3.1 语法
<fmt:formatDate> 标签用于使用不同的方式格式化日期
<fmt:formatDate> 标签语法格式如下:<fmt:formatDate value="<string>" type="<string>" dateStyle="<string>" timeStyle="<string>" pattern="<string>" timeZone="<string>" var="<string>" scope="<string>"/>
| 标签有如下属性 |
|
|
|
| 属性 |
描述 |
必须 |
默认值 |
| value |
要显示的日期 |
是 |
无 |
| type |
DATE, TIME, BOTH |
否 |
date |
| dateStyle |
FULL, LONG, MEDIUM, SHORT, DEFAULT |
否 |
default |
| timeStyle |
FULL, LONG, MEDIUM, SHORT, DEFAULT |
否 |
default |
| pattern |
自定义格式模式 |
否 |
无 |
| timeZone |
显示日期的时区 |
否 |
默认时区 |
| var |
存储格式化日期的变量名 |
否 |
显示在页面 |
| scope |
存储格式化日志变量的范围 |
否 |
页面 |
| 标签格式模式-pattern属性 |
|
|
| 代码 |
描述 |
实例 |
| G |
时代标志 |
AD |
| y |
不包含纪元的年份 如果年份小于 10,则前面会加上 0 |
2002 |
| M |
月份数字。一位数的月份没有前导零 |
April & 04 |
| d |
月中的某一天。一位数的日期没有前导零 |
20 |
| h |
12 小时制的小时。一位数的小时数没有前导零 |
12 |
| H |
24 小时制的小时。一位数的小时数没有前导零 |
0 |
| m |
分钟。一位数的分钟数没有前导零 |
45 |
| s |
秒。一位数的秒数没有前导零 |
52 |
| S |
毫秒 |
970 |
| E |
周几 |
Tuesday |
| D |
一年中的第几天 |
180 |
| F |
一个月中的第几个周几 |
2 (一个月中的第二个星期三) |
| w |
一年中的第几周r |
27 |
| W |
一个月中的第几周 |
2 |
| a |
a.m./p.m. 指示符 |
PM |
| k |
小时(12 小时制的小时) |
24 |
| K |
小时(24 小时制的小时) |
0 |
| z |
时区 |
中部标准时间 |
| ‘ |
|
转义文本 |
| ‘’ |
|
单引号 |
0x02.3.2 小例子
// 文件地址: ./src/main/webapp/JSTL库测试/// 文件名称: jstl_fmt_formatdate.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %><c:set var="now" value="<%=new java.util.Date()%>"/><html><head> <title>jstl_fmt_formatdate</title></head><body> <h3>日期格式化:</h3> <p>日期格式化(1): <fmt:formatDate type="time" value="${now}"/></p> <p>日期格式化(2): <fmt:formatDate type="date" value="${now}"/></p> <p>日期格式化(3): <fmt:formatDate type="both" value="${now}"/></p> <p>日期格式化(4): <fmt:formatDate type="both" dateStyle="short" timeStyle="short" value="${now}"/></p> <p>日期格式化(5): <fmt:formatDate type="both" dateStyle="medium" timeStyle="medium" value="${now}"/></p> <p>日期格式化(6): <fmt:formatDate type="both" dateStyle="long" timeStyle="long" value="${now}"/></p> <p>日期格式化(7): <fmt:formatDate pattern="yyyy-MM-dd" value="${now}"/></p></body></html>// 打开: http://127.0.0.1:8081/mavenJspTest_war/JSTL库测试/jstl_fmt_formatdate.jsp

0x02.4
0x02.4.1 语法
<fmt:parseDate> 标签用于解析日期
<fmt:parseDate> 标签语法格式如下:<fmt:parseDate value="<string>" type="<string>" dateStyle="<string>" timeStyle="<string>" pattern="<string>" timeZone="<string>" parseLocale="<string>" var="<string>" scope="<string>"/>
| 标签有如下属性 |
|
|
|
| 属性 |
描述 |
必须 |
默认值 |
| value |
要显示的日期 |
是 |
无 |
| type |
DATE, TIME, 或 BOTH |
否 |
date |
| dateStyle |
FULL, LONG, MEDIUM, SHORT, 或 DEFAULT |
否 |
default |
| timeStyle |
FULL, LONG, MEDIUM, SHORT, 或 DEFAULT |
否 |
default |
| pattern |
自定义格式模式 |
否 |
无 |
| timeZone |
显示日期的时区 |
否 |
默认时区 |
| var |
存储格式化日期的变量名 |
否 |
显示在页面 |
| scope |
存储格式化日志变量的范围 |
否 |
页面 |
0x02.4.2 小例子
// 文件地址: ./src/main/webapp/JSTL库测试/// 文件名称: jstl_fmt_parsedate.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %><html><head> <title>jstl_fmt_parsedate</title></head><body><h3>日期解析: 11-01-2017 </h3><c:set var="now" value="11-01-2017"/><fmt:parseDate value="${now}" var="parsedEmpDate" pattern="dd-MM-yyyy"/><p>解析后的日期为: <c:out value="${parsedEmpDate}"/></p></body></html>// 打开: http://127.0.0.1:8081/mavenJspTest_war/JSTL库测试/jstl_fmt_parsedate.jsp
0x02.5
0x02.5.1 语法
<fmt:bundle> 标签将指定的资源束对出现在 <fmt:bundle> 标签中的 <fmt:message> 标签可用这样我们就可以省去为每个 <fmt:message>标签指定资源束的很多步骤比如说,下面的两个 <fmt:bundle> 块将产生同样的输出:<fmt:bundle basename="cn.twle.demo"> <fmt:message key="count.title"/></fmt:bundle><fmt:bundle basename="cn.twle.demo" prefix="count."> <fmt:message key="title"/></fmt:bundle>
<fmt:bundle> 标签语法格式如下:<fmt:bundle baseName="<string>" prefix="<string>"/>
| 标签有如下属性 |
|
|
|
| 属性 |
描述 |
必须 |
默认值 |
| basename |
指定被载入的资源束的基础名称 |
是 |
无 |
资源束:资源束包含区域特定对象资源束包含键值对当我们的程序需要区域特定资源时,可以将所有的关键词对所有的locale共享,但是也可以为locale指定转换后的值资源束可以帮助提供指定给locale的内容一个Java资源束文件包含一系列的键值对
0x02.5.2 小例子
首先我们来建立一个资源束在src/main/resources目录下建立一个demo_zh_CN.properties文件内容如下:count.one=\u58f9count.two=\u8d30count.three=\u53c1注意-1: properties文件里的中文内容要转成 Unicode注意-2: 没有resources目录的,自己在src/main创建一个即可
然后再创建一个demo_en_US.properties文件内容如下:count.one=firstcount.two=secondcount.three=three
// 文件地址: ./src/main/webapp/JSTL库测试/// 文件名称: jstl_fmt_bundle.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %><html><head> <title>jstl_fmt_bundle</title></head><body><%--有prefix属性的例子--%><fmt:bundle basename="demo" prefix="count."> <div><fmt:message key="one"/></div> <div><fmt:message key="two"/></div> <div><fmt:message key="three"/></div></fmt:bundle><hr/><%--无prefix属性的例子--%><fmt:bundle basename="demo"> <div><fmt:message key="count.one"/></div> <div><fmt:message key="count.two"/></div> <div><fmt:message key="count.three"/></div></fmt:bundle></body></html>// 打开: http://127.0.0.1:8081/mavenJspTest_war/JSTL库测试/jstl_fmt_bundle.jsp
0x02.6
0x02.6.1 语法
<fmt:setLocale> 标签用来将给定的区域存储在locale配置变量中
<fmt:setLocale>标签语法格式如下:<fmt:setLocale value="<string>" variant="<string>" scope="<string>"/>
| 标签有如下属性 |
|
|
|
| 属性 |
描述 |
必须 |
默认值 |
| value |
指定 ISO-639 语言码和 ISO-3166 国家码 |
是 |
en_US |
| variant |
特定浏览器变体 |
否 |
无 |
| scope |
Locale配置变量的作用域 |
否 |
Page |
资源束:资源束包含区域特定对象资源束包含键值对当我们的程序需要区域特定资源时,可以将所有的关键词对所有的locale共享,但是也可以为locale指定转换后的值资源束可以帮助提供指定给locale的内容一个Java资源束文件包含一系列的键值对
0x02.6.2 小例子
demo_zh_CN.properties与demo_en_US.properties文件的创建方法请查看<fmt:bundle>标签的小例子谢谢
// 文件地址: ./src/main/webapp/JSTL库测试/// 文件名称: jstl_fmt_setlocale.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %><html><head> <title>jstl_fmt_setlocale</title></head><body><%--默认显示中文--%><fmt:bundle basename="demo" prefix="count."> <div><fmt:message key="one"/></div> <div><fmt:message key="two"/></div> <div><fmt:message key="three"/></div></fmt:bundle><hr/><%--修改地区为美国,这样就会自动显示美国的词汇--%><fmt:setLocale value="en_US"/><fmt:bundle basename="demo" prefix="count."> <div><fmt:message key="one"/></div> <div><fmt:message key="two"/></div> <div><fmt:message key="three"/></div></fmt:bundle></body></html>// 打开: http://127.0.0.1:8081/mavenJspTest_war/JSTL库测试/jstl_fmt_setlocale.jsp
0x02.7 /
0x02.7.1 语法
<fmt:setBundle>标签用来载入一个资源束,然后将它存储在作用域中已命名的变量或bundle配置变量中
<fmt:setBundle> 语法格式如下:<fmt:setBundle baseName="<string>" var="<string>" scope="<string>"/>
| 标签有如下属性 |
|
|
|
| 属性 |
描述 |
必须 |
默认值 |
| basename |
资源束家族基础名称 |
是 |
无 |
| var |
存储新资源束的变量 |
否 |
Replace default |
| scope |
变量的作用域 |
否 |
Page |
0x02.7.2 语法
<fmt:message> 标签映射一个关键字给局部消息,然后执行参数替换
<fmt:message> 标签语法格式如下:<fmt:message key="<string>" bundle="<string>" var="<string>" scope="<string>"/>
| 标签有如下属性 |
|
|
|
| 属性 |
描述 |
是否必要 |
默认值 |
| key |
要检索的消息关键字 |
否 |
Body |
| bundle |
要使用的资源束 |
否 |
默认资源束 |
| var |
存储局部消息的变量名 |
否 |
Print to page |
| scope |
var属性的作用域 |
否 |
Page |
0x02.7.3 小例子
demo_zh_CN.properties文件的创建方法请查看<fmt:bundle>标签的小例子谢谢
// 文件地址: ./src/main/webapp/JSTL库测试/// 文件名称: jstl_fmt_setbundle-fmt_message.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %><html><head> <title>jstl_fmt_setbundle-fmt_message</title></head><body><fmt:setLocale value="zh_CN"/><fmt:setBundle basename="demo" var="lang"/><div><fmt:message key="count.one" bundle="${lang}"/></div><div><fmt:message key="count.two" bundle="${lang}"/></div><div><fmt:message key="count.three" bundle="${lang}"/></div></body></html>// 打开: http://127.0.0.1:8081/mavenJspTest_war/JSTL库测试/jstl_fmt_setbundle-fmt_message.jsp

0x02.8
0x02.8.1 语法
<fmt:timeZone> 标签用来指定时区, 供其它标签使用
<fmt:timeZone> 标签语法格式如下:<fmt:timeZone value="<string>" />
| 标签有如下属性 |
|
|
|
| 属性 |
描述 |
是否必要 |
默认值 |
| value |
时区 |
是 |
无 |
0x02.8.2 小例子
// 文件地址: ./src/main/webapp/JSTL库测试/// 文件名称: jstl_fmt_timezone.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %><html><head> <title>jstl_fmt_timezone</title></head><body><c:set var="now" value="<%=new java.util.Date()%>"/><div>Formatting: <fmt:formatDate value="${now}" type="both" timeStyle="long" dateStyle="long"/></div><c:forEach var="zone" items="<%=java.util.TimeZone.getAvailableIDs()%>"> <div> <c:out value="${zone}"/>: <fmt:timeZone value="${zone}"> <fmt:formatDate value="${now}" timeZone="${zn}" type="both"/> </fmt:timeZone> </div></c:forEach><hr/></body></html>// 打开: http://127.0.0.1:8081/mavenJspTest_war/JSTL库测试/jstl_fmt_timezone.jsp

0x02.9
0x02.9.1 语法
<fmt:setTimeZone> 标签用来复制一个时区对象至指定的作用域
<fmt:setTimeZone> 标签语法格式如下:<fmt:setTimeZone value="<string>" var="<string>" scope="<string>"/>
| 标签有如下属性 |
|
|
|
| 属性 |
描述 |
必须 |
默认值 |
| value |
时区 |
是 |
无 |
| var |
存储新时区的变量名 |
否 |
Replace default |
| scope |
变量的作用域 |
否 |
Page |
0x02.9.2 小例子
// 文件地址: ./src/main/webapp/JSTL库测试/// 文件名称: jstl_fmt_settimezone.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %><html><head> <title>jstl_fmt_settimezone</title></head><body><c:set var="now" value="<%=new java.util.Date()%>"/><div>当前时区时间: <fmt:formatDate value="${now}" type="both" timeStyle="long" dateStyle="long"/></div><fmt:setTimeZone value="GMT-0"/><hr/><div>修改为GMT-0时区</div><div>Date in Changed Zone: <fmt:formatDate value="${now}" type="both" timeStyle="long" dateStyle="long"/></div></body></html>// 打开: http://127.0.0.1:8081/mavenJspTest_war/JSTL库测试/jstl_fmt_settimezone.jsp
0x02.10
0x02.10.1 语法
<fmt:requestEncoding>标签用来指定返回给Web应用程序的表单编码类型
<fmt:requestEncoding> 语法格式如下:<fmt:requestEncoding value="<string>"/>
| 标签有如下属性 |
|
|
|
| 属性 |
描述 |
必须 |
默认值 |
| key |
字符编码集的名称, 用于解码 request 参数 |
是 |
无 |
可以使用 <fmt:requestEncoding>标签来指定字符集,用于解码来自表单的数据在字符集不是ISO-8859-1时必须使用这个标签由于大多数浏览器在它们的请求中不包含Content-Type头,所以需要这个标签<fmt:requestEncoding>标签的目的就是用来指定请求的Content-Type我们必须指定一个Content-Type,就算response是通过Page指令的contentType属性来编码这是因为response的实际区域可能与Page指令所指定的不同如果页面包含I18N-capable格式行为用于设置response的locale属性(通过调用ServletResponse.setLocale()方法),任何在页面中指定的编码集将会被覆盖
0x02.10.2 小例子
demo_zh_CN.properties文件的创建方法请查看<fmt:bundle>标签的小例子谢谢
// 文件地址: ./src/main/webapp/JSTL库测试/// 文件名称: jstl_fmt_requestencoding.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %><html><head> <title>jstl_fmt_requestencoding</title></head><body><fmt:requestEncoding value="UTF-8"/><fmt:setLocale value="zh_CN"/><fmt:setBundle basename="demo" var="lang"/><div><fmt:message key="count.one" bundle="${lang}"/></div><div><fmt:message key="count.two" bundle="${lang}"/></div><div><fmt:message key="count.three" bundle="${lang}"/></div></body></html>// 打开: http://127.0.0.1:8081/mavenJspTest_war/JSTL库测试/jstl_fmt_requestencoding.jsp
