Java for Web学习笔记(三十):JSTL(6)FMT Tag(下)
来源:互联网 发布:天堂2源码服务端 编辑:程序博客网 时间:2024/05/17 08:28
fmt:requestEncoding
<fmt:requestEncoding value="GB18030" />
fmt:requestEncoding说是用来设置请求的编码,但这我们是不需要使用的。对于编码,我们应该在jsp的一开始就设定编码,而不是在半道。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>以及在html的<header>中设置:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
另一方面,现代浏览器的请求如果不使用ISO-8859-1,都会设置Content-Type消息头。通常,在传递表格,用了Content-Type:application/x-www-form-urlencoded,这个就是ISO-8859-1编码。更重要的fmt:requestEncoding不会翻译成为html在HTTP中传递,浏览器对此并无识别。这个只是在jsp文件中作为一个编码的标记而已。一句话:忘记它。
fmt:timezone和fmt:setTimezone
这和fmt:bundle已经fmt:setBundle的使用方式雷同,用于设置时间显示的时区。
缺省,时区使用的是web container的JVM时区,我们也可以在web.xml中设置javax.servlet.jsp.jstl.fmt.timeZone来设置缺省的时区。如果要在页面中指定,可以使用fmt:timezone,也可以设置fmt:formatDate中的timezone参数来实现。
<c:set var="now" value="<%=new java.util.Date()%>" /><fmt:setTimeZone value="America/Chicago" var="timeZoneCst" /> <!-- 时区的值可以查看java.util.TimeZone的javadoc--><fmt:formatDate value="${now}" timeZone="${timeZoneCst}" type="both" /><br/><fmt:formatDate value="${now}" type="both" /><br/> <!-- 使用缺省的时区,如无设置,就是web container机器的时区 --><fmt:timeZone value="Etc/GMT+1"> <fmt:formatDate value="${now}" type="both" /><br/></fmt:timeZone>
网上有一个轮训所有时区的fmt:timeZone的例子[1],抄录如下:
<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>
fmt:formatDate和fmt:parseDate
<fmt:formatDate value="<string>" <!-- 这个值必须是java.util.Date的EL实例 --> type="<string>" <!-- 有效值为date,time,both,表示只显示日期,只显示时间,两者均显示 --> dateStyle="<string>" <!-- 在java.text.DateFormat中定义,有效值为default,short,medium,long,full --> timeStyle="<string>" <!-- 同上 --> pattern="<string>" <!-- 自定义格式,为java.text.SimpleDateFormat,一旦定义,type,dateStyle,timeStyle将失效 --> timeZone="<string>" var="<string>" <!-- 在scope范围中存放的参数 --> scope="<string>"/>
在前面fmt:timeZone,我们已经给出了fmt:formatDate的相关使用例子,不再重复。这里要指出的是,不同的locale,会有不同的显示方法,例如2016年10月3日,dateStyle=”short”,在en_US中显示为10/3/16,在法国法语中显示为3/10/16。
fmt:parseDate是fmt:formatDate的反向操作,参数一样,将字符串对象为Date的对象,存放在var中。这在实际中很少使用。
<c:set var="test" value="20-10-2010" /><fmt:parseDate value="${test}" var="parsedEmpDate" pattern="dd-MM-yyyy" />Parsed Date: <c:out value="${parsedEmpDate}"
fmt:formatNumber和fmt:parseNumber
fmt:formatNumber是非常有用的,可以用来显示数字,货币,百分比(NUMBER, CURRENCY, or PERCENT )。
<c:set var="num" value="12345.6789" /><fmt:formatNumber type="currency" value="${num}"/> ¤12,345.68<fmt:formatNumber type="currency" value="${num}" currencyCode="CNY" /> CNY12,345.68<fmt:formatNumber type="currency" value="${num}" currencySymbol="$"/> $12,345.68,不建议使用,另currencyCode优先<fmt:setLocale value="zh_CN"/> <fmt:formatNumber type="currency" value="${num}"/> ¥12,345.68<fmt:formatNumber type="currency" value="${num}" currencyCode="CNY" /> ¥12,345.68<fmt:setLocale value="es_ES"/> <fmt:formatNumber type="currency" value="${num}"/> 12.345,68 €<fmt:formatNumber type="currency" value="${num}" currencyCode="CNY" /> 12.345,68 CNY
currencyCode可以在 https://en.wikipedia.org/wiki/ISO_4217 中查看。我们看到西班牙货币的显示怪怪的,一般建议使用currencyCode,我们是CNY。在设定CNY的使用如果local是zh_CN(一致),则显示货币¥12,345.68,否则显示CNY12,345.68,具体格式根据本地locale的习惯,更符合本地人的阅读方式。
<c:set var="number" value="12345.6789" /><fmt:formatNumber type="number" value="${number}" /> 12,345.679<fmt:formatNumber type="number" value="${number}" maxIntegerDigits="3"/> 345.679 不建议使用<fmt:formatNumber type="number" value="${number}" minIntegerDigits="6"/> 012,345.679 <fmt:formatNumber type="number" value="${number}" maxFractionDigits="1"/> 12,345.7<fmt:formatNumber type="number" value="${number}" minFractionDigits="6"/> 12,345.678900<fmt:formatNumber type="number" value="${number}" minFractionDigits="6" groupingUsed="false"/> 12345.678900
上述的参数对所有type都有效。
<fmt:formatNumber type="percent" value="0.8572" /> 86% 可通过minFractionDigits设置小数点显示位数
maxFractionDigits在货币中根据locale的习惯,在数字中缺省为3,在percent中缺省为0。可以通过pattern设置样式,pattern遵循java.text.DecimalFormat的规则。
fmt:parseNumber用来反向解析的,没有minIntegerDigits,maxIntegerDigits,minFractionDigits,maxFractionDigits,groupingUsed参数,提供integerOnly,true表示只解析整数部分,提供parseLocale参数用于设定特定的locale。
相关链接: 我的Professional Java for Web Applications相关文章
- Java for Web学习笔记(三十):JSTL(6)FMT Tag(下)
- Java for Web学习笔记(二九):JSTL(5)FMT Tag(上)
- Java for Web学习笔记(二八):JSTL(4)Core Tag(下)
- Java for Web学习笔记(二六):JSTL(2)Core Tag(上)
- Java for Web学习笔记(二七):JSTL(3)Core Tag(中)
- Java for Web学习笔记(三一):JSTL(7)SQL Tag
- Java for Web学习笔记(三二):JSTL(8)XML Tag
- Java for Web学习笔记(三四):自定义tag(2)Tag
- Java for Web学习笔记(三五):自定义tag(3)TLDS和Tag Handler
- Java for Web学习笔记(三六):自定义tag(4)自定义Tag文件
- Java for Web学习笔记(三八):自定义tag(6)一些注意
- Java for Web学习笔记(六四):Controller替代Servlet(6)Spring Form Tag
- Java for Web学习笔记(二五):JSTL(1)使用JSTL
- JAVA学习笔记(三十)
- jstl(fmt)
- Java for Web学习笔记(十二):JSP(2)Tag:directive,declaration,scriptlet,expression
- Java for Web学习笔记(十四):JSP(4)JSP Tag
- Java for Web学习笔记(三三):自定义tag(1)篇外:Method和Function
- Head first HTML&CSS学习笔记
- 关键字:static,const,volatile
- ***[Lintcode]House Robber II
- Android-动画基础合集
- Uva 11134 问题分解,贪心策略区间选点问题
- Java for Web学习笔记(三十):JSTL(6)FMT Tag(下)
- 杂花生树(八)
- Web前端面试指导(二十八):什么是闭包,为什么要用它?
- js拷贝对象
- ArrayList、Vector与LinkedList的区别?
- 发送IP封包到高层协议
- 多元线性回归、梯度下降法、正规方程法简单实验
- 洛谷P1629 邮递员送信
- 第三章 例题三 阿格斯(自定义优先队列)