JSTL-格式标签库
主页:http://www.cnblogs.com/EasonJim/p/6958992.html的分支页。
一、<fmt:formatNumber>
<fmt:formatNumber>
标签用于格式化数字,百分比和货币。
属性:
<fmt:formatNumber>
标签具有如下所示属性:
属性 | 描述 | 是否必需 | 默认值 |
---|---|---|---|
value | 显示的数值 | 是 | 无 |
type | 数值、货币或百分比 | 否 | 数值 |
pattern | 为输出指定一个自定义格式模式 | 否 | 无 |
currencyCode | Currency代码(for type="currency") | 否 | 来自默认语言环境 |
currencySymbol | Currency符号(for type="currency") | 否 | 来自默认语言环境 |
groupingUsed | 是否将数值分组(TRUE or FALSE) | 否 | true |
maxIntegerDigits | 输出的整数位数的最大值 | 否 | 无 |
minIntegerDigits | 输出的整数位数的最小值 | 否 | 无 |
maxFractionDigits | 输出的小数位数的最大值 | 否 | 无 |
minFractionDigits | 输出的小数位数的最小值 | 否 | 无 |
var | 存储格式化数字的变量名 | 否 | 页面输出 |
scope | 存储格式化数字的变量范围 | 否 | 页面 |
-
如果type属性是百分比或数字,那么可以使用一些数字-格式化属性。maxIntegerDigits和minIntegerDigits属性允许指定数字的非小数部分的大小。如果实际数字超过了maxIntegerDigits,那么数字就会被截断。
-
属性同样允许确定使用多少为小数。minFractionalDigits和maxFractionalDigits属性允许指定小数位数。如果数字超过了小数位数的最大值,那么数字就会被截断。
-
分组可以用来在成千上万组之间插入逗号。通过将groupingIsUsed属性设置为真或假来指定分组。当分组与minIntegerDigits一起使用时,必须多加小心来得到预想的结果。
- 可能会选择使用pattern属性。该属性可以包含特殊字符,指定有多喜欢编码的数字。下表展示了这些代码。
Symbol | Description |
---|---|
0 |
代表了一个数字。 |
E |
代表了指数形式。 |
# |
代表一个数字;显示0为缺席。 |
. |
作为十进制分隔符的一个占位符。 |
, |
作为分组分隔符的一个占位符。 |
; |
分隔形式 |
- |
作为默认的负数前缀。 |
% |
乘以100并作为百分比显示。 |
? |
乘以1000并作为千分比显示。 |
¤ |
代表了货币符号; 被动态的货币符号取代。 |
X |
表明任何其他可以用作前缀或后缀的字符。 |
' |
用于在前缀或后缀中引用特殊字符。 |
实例:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <html> <head> <title>JSTL fmt:formatNumber Tag</title> </head> <body> <h3>Number Format:</h3> <c:set var="balance" value="120000.2309" /> <p>Formatted Number (1): <fmt:formatNumber value="${balance}" type="currency"/></p> <p>Formatted Number (2): <fmt:formatNumber type="number" maxIntegerDigits="3" value="${balance}" /></p> <p>Formatted Number (3): <fmt:formatNumber type="number" maxFractionDigits="3" value="${balance}" /></p> <p>Formatted Number (4): <fmt:formatNumber type="number" groupingUsed="false" value="${balance}" /></p> <p>Formatted Number (5): <fmt:formatNumber type="percent" maxIntegerDigits="3" value="${balance}" /></p> <p>Formatted Number (6): <fmt:formatNumber type="percent" minFractionDigits="10" value="${balance}" /></p> <p>Formatted Number (7): <fmt:formatNumber type="percent" maxIntegerDigits="3" value="${balance}" /></p> <p>Formatted Number (8): <fmt:formatNumber type="number" pattern="###.###E0" value="${balance}" /></p> <p>Currency in USA : <fmt:setLocale value="en_US"/> <fmt:formatNumber value="${balance}" type="currency"/></p> </body> </html>
这将会产生如下所示结果:
二、<fmt:parseNumber>
<fmt:parseNumber>
标签用于解析数字、百分比和货币。
属性:
<fmt:parseNumber>
标签具有如下所示属性:
属性 | 描述 | 是否必需 | 默认值 |
---|---|---|---|
value | 要读取(解析)的数值 | 否 | Body |
type | 数字、货币或百分比 | 否 | 数字 |
parseLocale | 解析数字时使用的语言环境 | 否 | 默认语言环境 |
integerOnly | 解析一个整数(true)还是解析一个浮点数(false) | 否 | false |
pattern | 自定义解析模式 | 否 | 无 |
timeZone | 显示日期的时区 | 否 | 默认的时区 |
var | 存储解析数字的变量名 | 否 | 页面输出 |
scope | 存储格式化数字的变量范围 | 否 | 页面 |
提供的pattern属性的工作方式与<fmt:formatNumber>标签的pattern属性类似。然而,在解析的情况中,pattern属性告诉解析器想要什么格式。
实例:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <html> <head> <title>JSTL fmt:parseNumber Tag</title> </head> <body> <h3>Number Parsing:</h3> <c:set var="balance" value="1250003.350" /> <fmt:parseNumber var="i" type="number" value="${balance}" /> <p>Parsed Number (1) : <c:out value="${i}" /></p> <fmt:parseNumber var="i" integerOnly="true" type="number" value="${balance}" /> <p>Parsed Number (2) : <c:out value="${i}" /></p> </body> </html>
这将会产生如下所示结果:
三、<fmt:formatDate>
<fmt:formatDate>
标签用于以多种方式格式化日期。
属性:
<fmt:formatDate>
标签具有如下所示属性:
属性 | 描述 | 是否必需 | 默认值 |
---|---|---|---|
value | 显示的日期值 | 是 | 无 |
type | 日期、时间或两者 | 否 | 日期 |
dateStyle | FULL,LONG,MEDIUM,SHORT,或默认 | 否 | 默认 |
timeStyle | FULL,LONG,MEDIUM,SHORT,或默认 | 否 | 默认 |
pattern | 自定义格式化模式 | 否 | 无 |
timeZone | 显示的日期时区 | 否 | 默认的时区 |
var | 存储格式化日期的变量名 | 否 | 页面输出 |
scope | 存储格式化日期的变量范围 | 否 | 页面 |
pattern属性指定了更精确地日期处理:
代码 | 目的 | 示例 |
---|---|---|
G |
时代指示器 |
AD |
y |
年 |
2002 |
M |
月 |
April & 04 |
d |
一个月中的某一天 |
20 |
h |
时间(12-hour time) |
12 |
H |
时间(24-hour time) |
0 |
m |
分钟 |
45 |
s |
秒 |
52 |
S |
毫秒 |
970 |
E |
一周中的某一天 |
Tuesday |
D |
一年中的某一天 |
180 |
F |
一个月中的某一周的某一天 |
2 (2nd Wed in month) |
w |
一年中的某一周 |
27 |
W |
一个月中的某一周 |
2 |
a |
a.m./p.m. 显示器 |
PM |
k |
时间(12-hour time) |
24 |
K |
时间(24-hour time) |
0 |
z |
时区 |
Central Standard Time |
' |
文本消逝 |
|
'' |
单引号 |
实例:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <html> <head> <title>JSTL fmt:dateNumber Tag</title> </head> <body> <h3>Number Format:</h3> <c:set var="now" value="<%=new java.util.Date()%>" /> <p>Formatted Date (1): <fmt:formatDate type="time" value="${now}" /></p> <p>Formatted Date (2): <fmt:formatDate type="date" value="${now}" /></p> <p>Formatted Date (3): <fmt:formatDate type="both" value="${now}" /></p> <p>Formatted Date (4): <fmt:formatDate type="both" dateStyle="short" timeStyle="short" value="${now}" /></p> <p>Formatted Date (5): <fmt:formatDate type="both" dateStyle="medium" timeStyle="medium" value="${now}" /></p> <p>Formatted Date (6): <fmt:formatDate type="both" dateStyle="long" timeStyle="long" value="${now}" /></p> <p>Formatted Date (7): <fmt:formatDate pattern="yyyy-MM-dd" value="${now}" /></p> </body> </html>
这将会产生如下所示的结果:
四、<fmt:parseDate>
<fmt:parseDate>
标签用于解析日期。
属性:
<fmt:parseDate>
标签具有如下所示属性:
属性 | 描述 | 是否必需 | 默认值 |
---|---|---|---|
value | 要读取(解析)的日期值 | 否 | Body |
type | 日期、时间或两者 | 否 | 日期 |
dateStyle | FULL,LONG,MEDIUM,SHORT,或默认 | 否 | 默认 |
timeStyle | FULL,LONG,MEDIUM,SHORT,或默认 | 否 | 默认 |
parseLocale | 解析日期时使用的语言环境 | 否 | 默认语言环境 |
pattern | 自定义解析模式 | 否 | 无 |
timeZone | 解析的日期的时区 | 否 | 默认的时区 |
var | 存储解析日期的变量名 | 否 | 页面输出 |
scope | 存储格式化日期的变量范围 | 否 | 页面 |
实例:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <html> <head> <title>JSTL fmt:parseDate Tag</title> </head> <body> <h3>Date Parsing:</h3> <c:set var="now" value="20-10-2010" /> <fmt:parseDate value="${now}" var="parsedEmpDate" pattern="dd-MM-yyyy" /> <p>Parsed Date: <c:out value="${parsedEmpDate}" /></p> </body> </html>
这将产生如下所示的结果:
五、<fmt:bundle>
<fmt:bundle>
标签使指定的包对所有的出现在<fmt:bundle>
和</fmt:bundle>
标签之间的<fmt:message>
标签是可用的。这可以节省额外的步骤为每个<fmt:message>
标签指定资源包。
例如,下面的两个<fmt:bundle>
块会产生相同的输出:
<fmt:bundle basename="com.jsoft.Example"> <fmt:message key="count.one"/> </fmt:bundle> <fmt:bundle basename="com.jsoft.Example" prefix="count."> <fmt:message key="title"/> </fmt:bundle>
属性:
<fmt:bundle>
标签具有如下所示属性:
属性 | 描述 | 是否必需 | 默认值 |
---|---|---|---|
basename | 指定了要被加载的资源包的基名。 | 是 | 无 |
prefix | 在<fmt:message>子标签中预先考虑的每个键值名 | 否 | 无 |
实例:
资源包包含特定于本地语言环境的对象。资源包包含键/值对。当程序需要一个特定于本地语言环境的资源时,要把所有的键与所有的语言环境保持一致,但可以有特定于语言环境的转换值。资源包中帮助提供特定于语言环境的内容。
一个Java资源包文件包含一系列key-to-string映射。关注的方法包括创建扩展java.util.ListResourceBundle类的编译后的Java类。必须编译这些类文件并使其可用于Web应用程序的类路径中。
定义一个默认的资源包,如下所示:
package com.jsoft; import java.util.ListResourceBundle; public class Example extends ListResourceBundle { public Object[][] getContents() { return contents; } static final Object[][] contents = { {"count.one", "One"}, {"count.two", "Two"}, {"count.three", "Three"}, }; }
编译上述类Example.class并确保它在Web应用程序中的类路径中时可用的。现在可以使用下面的JSTL标签来显示三个数字,如下所示:
<%@ 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:bundle Tag</title> </head> <body> <fmt:bundle basename="com.jsoft.Example" prefix="count."> <fmt:message key="one"/><br/> <fmt:message key="two"/><br/> <fmt:message key="three"/><br/> </fmt:bundle> </body> </html>
这会产生如下所示的结果:
在不带前缀的情况下尝试上述例子,如下所示:
<%@ 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:bundle Tag</title> </head> <body> <fmt:bundle basename="com.jsoft.Example"> <fmt:message key="count.one"/><br/> <fmt:message key="count.two"/><br/> <fmt:message key="count.three"/><br/> </fmt:bundle> </body> </html>
这会产生如下所示的结果:
六、<fmt:setLocale>
<fmt:setLocale>
标签用于在语言环境配置变量中存储给定的语言环境。
属性:
<fmt:setLocale>
标签具有如下所示属性:
属性 | 描述 | 是否必需 | 默认值 |
---|---|---|---|
value | 指定了一个两部分代码,代表ISO-639语言代码和ISO-3166国家代码。 | 是 | en_US |
variant | 浏览器特定的变量 | 否 | 无 |
scope | 语言环境配置变量的范围 | 否 | 页面 |
实例:
资源包包含特定于本地语言环境的对象。资源包包含键/值对。当程序需要一个特定于本地语言环境的资源时,要把所有的键与所有的语言环境保持一致,但可以有特定于语言环境的转换值。资源包中帮助提供特定于语言环境的内容。
一个Java资源包文件包含一系列key-to-string映射。关注的方法包括创建扩展java.util.ListResourceBundle类的编译后的Java类。必须编译这些类文件并使其可用于Web应用程序的类路径中。
定义一个默认的资源包,如下所示:
package com.jsoft; import java.util.ListResourceBundle; public class Example extends ListResourceBundle { public Object[][] getContents() { return contents; } static final Object[][] contents = { {"count.one", "One"}, {"count.two", "Two"}, {"count.three", "Three"}, }; }
现在再定义一个资源包,使用西班牙语:
package com.jsoft; import java.util.ListResourceBundle; public class Example_es_ES extends ListResourceBundle { public Object[][] getContents() { return contents; } static final Object[][] contents = { {"count.one", "Uno"}, {"count.two", "Dos"}, {"count.three", "Tres"}, }; }
编译上述类Example.class和Example_es_ES.class,确保它们在Web应用程序中的类路径中是可用的。现在可以使用下面的JSTL标签来显示三个数字,如下所示:
<%@ 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:setLocale Tag</title> </head> <body> <fmt:bundle basename="com.jsoft.Example"> <fmt:message key="count.one"/><br/> <fmt:message key="count.two"/><br/> <fmt:message key="count.three"/><br/> </fmt:bundle> <!-- Change the Locale --> <fmt:setLocale value="es_ES"/> <fmt:bundle basename="com.jsoft.Example"> <fmt:message key="count.one"/><br/> <fmt:message key="count.two"/><br/> <fmt:message key="count.three"/><br/> </fmt:bundle> </body> </html>
这将产生如下所示结果:
七、<fmt:setBundle>
<fmt:setBundle>
标签用于加载资源包,并把它存储在已命名的给定范围的变量中或存储在包配置变量中。
属性:
<fmt:setBundle>
标签具有如下所示属性:
属性 | 描述 | 是否必需 | 默认值 |
---|---|---|---|
basename | 资源包家族的基本名称,作为一个给定范围的变量或配置变量来显示 | 是 | 无 |
var | 存储新包的变量名 | 否 | 取代默认值 |
scope | 存储新包的变量范围 | 否 | 页面 |
实例:
<%@ 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:setBundle Tag</title> </head> <body> <fmt:setLocale value="en"/> <fmt:setBundle basename="com.jsoft.Example" var="lang"/> <fmt:message key="count.one" bundle="${lang}"/><br/> <fmt:message key="count.two" bundle="${lang}"/><br/> <fmt:message key="count.three" bundle="${lang}"/><br/> </body> </html>
这将产生如下所示结果:
八、<fmt:timeZone>
<fmt:timeZone>
标签用于指定所有标签主体内用到的时区。
属性:
<fmt:timeZone>
标签具有如下所示属性:
属性 | 描述 | 是否必需 | 默认值 |
---|---|---|---|
value | 应用于主体的时区 | 是 | 无 |
实例:
<%@ 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 Tag</title> </head> <body> <c:set var="now" value="<%=new java.util.Date()%>" /> <table border="1" width="100%"> <tr> <td width="100%" colspan="2" bgcolor="#0000FF"> <p align="center"> <b> <font color="#FFFFFF" size="4">Formatting: <fmt:formatDate value="${now}" type="both" timeStyle="long" dateStyle="long" /> </font> </b> </p> </td> </tr> <c:forEach var="zone" items="<%=java.util.TimeZone.getAvailableIDs()%>"> <tr> <td width="51%"> <c:out value="${zone}" /> </td> <td width="49%"> <fmt:timeZone value="${zone}"> <fmt:formatDate value="${now}" timeZone="${zn}" type="both" /> </fmt:timeZone> </td> </tr> </c:forEach> </table> </body> </html>
这将产生如下所示结果:
九、<fmt:setTimeZone>
<fmt:setTimeZone>
标签用于将时区对象复制到指定的范围变量中。
属性:
<fmt:setTimeZone>
标签具有如下所示属性:
属性 | 描述 | 是否必需 | 默认值 |
---|---|---|---|
value | 作为给定范围的变量或配置变量显示的时区 | 是 | 无 |
var | 存储新时区的变量名 | 否 | 取代默认值 |
scope | 存储新时区的变量范围 | 否 | 页面 |
实例:
<%@ 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 Tag</title> </head> <body> <c:set var="now" value="<%=new java.util.Date()%>" /> <p>Date in Current Zone: <fmt:formatDate value="${now}" type="both" timeStyle="long" dateStyle="long" /></p> <p>Change Time Zone to GMT-8</p> <fmt:setTimeZone value="GMT-8" /> <p>Date in Changed Zone: <fmt:formatDate value="${now}" type="both" timeStyle="long" dateStyle="long" /></p> </body> </html>
这将产生如下所示的结果:
十、<fmt:message>
<fmt:message>
标签将键映射到本地化的消息中并执行参数替换。
属性:
<fmt:message>
标签具有如下所示属性:
属性 | 描述 | 是否必需 | 默认值 |
---|---|---|---|
key | 要检索的消息键 | 否 | Body |
bundle | 使用的资源包 | 否 | 默认包 |
var | 存储本地化消息的变量名 | 否 | 页面输出 |
scope | 存储本地化消息的变量范围 | 否 | 页面 |
实例:
<%@ 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:message Tag</title> </head> <body> <fmt:setLocale value="en"/> <fmt:setBundle basename="com.jsoft.Example" var="lang"/> <fmt:message key="count.one" bundle="${lang}"/><br/> <fmt:message key="count.two" bundle="${lang}"/><br/> <fmt:message key="count.three" bundle="${lang}"/><br/> </body> </html>
这将会生成如下所示结果:
十一、<fmt:requestEncoding>
<fmt:requestEncoding>
标签用于指定编码类型,该编码类型用于将数据传回到Web应用程序的表单中。
属性:
<fmt:requestEncoding>
标签具有如下所示属性:
属性 | 描述 | 是否必需 | 默认值 |
---|---|---|---|
key | 当解码请求参数时,想要应用的字符编码的名称 | 是 | 无 |
当想要为从表单发送的解码数据指定字符编码时,就会用到< fmt:requestEncoding >标签。该标签必须和与ISO-8859-1不同的字符编码一起使用。由于大多数浏览器在它们的请求中不包括内容类型的头信息,所以这个标签是必需的。
<fmt:requestEncoding>
标签的目的是指定请求的内容类型。必须指定内容类型,即使页面编码生成的响应式通过页面指令的内容类型属性指定的。这是因为响应的实际语言环境(以及字符编码)可能与页面指令中指定的值不同。
如果页面包含一个I18N-capable格式化操作,通过调用ServletResponse.setLocale()设置了响应的语言环境(以及字符编码),任何在页面指令中指定的编码都将被覆盖。
实例:
<%@ 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:message Tag</title> </head> <body> <fmt:requestEncoding value="UTF-8" /> <fmt:setLocale value="es_ES"/> <fmt:setBundle basename="com.jsoft.Example" var="lang"/> <fmt:message key="count.one" bundle="${lang}"/><br/> <fmt:message key="count.two" bundle="${lang}"/><br/> <fmt:message key="count.three" bundle="${lang}"/><br/> </body> </html>
这将产生如下所示的结果: