jstl学习笔记(中)

9.2.3 循环标签

 

循环标签主要实现迭代操作。主要包含两个标签:<c:forEach>和<c:forTokens>标签,接下来将详细介绍这两个标签的用法。

1.<c:forEach>标签

该标签根据循环条件遍历集合(Collection)中的元素。

【语法】:

<c:forEach var=”name” items=”Collection” varStatus=”StatusName” begin=”begin” end=”end” step=”step”>

本体内容

</c:forEach>

【参数解析】:

(1)var设定变量名用于存储从集合中取出元素。

(2)items指定要遍历的集合。

(3)varStatus设定变量名,该变量用于存放集合中元素的信息。    

(4)begin、end用于指定遍历的起始位置和终止位置(可选)。

(5)step指定循环的步长。

参数类型和相关说明见表9-1。

表9-1 循环标签属性说明

 

名称

EL

类型

是否必须

默认值

var

N

String

items

Y

Arrays

Collection

Iterator

Enumeration

Map

String []args

begin

Y

int

0

end

Y

int

集合中最后一个元素

step

Y

int

1

varStatus

N

String

 

其中varStatus有4个状态属性(见表9-2)。

表9-2 varStatus的4个状态

 

属性名

类型

说明

index

int

当前循环的索引值

count

int

循环的次数

frist

boolean

是否为第一个位置

last

boolean

是否为第二个位置

 

【示例代码】:代码9.10实现了遍历的两种方式:设定起始位置、不设定起始位置。同时实现了获得原属的状态信息。

代码9.10 <c:forEach>标签使用示例:coredemo08.jsp

    <%@ page contentType="text/html;charset=GBK" %>

    <%@page import="java.util.List"%>

    <%@page import="java.util.ArrayList"%>

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

    <html>

    <head>

             <title>JSTL: -- forEach标签实例</title>

    </head>

    <body>

    <h4><c:out value="forEach实例"/></h4>

    <hr>

             <%

                     List a=new ArrayList();

                     a.add("贝贝");

                      a.add("晶晶");

                     a.add("欢欢");

                      a.add("莹莹");

                       a.add("妮妮");

             request.setAttribute("a",a);

             %>

             <B><c:out value="不指定begin和end的迭代:" /></B><br>

            <c:forEach var="fuwa" items="${a}">

            &nbsp;<c:out value="${fuwa}"/><br>

             </c:forEach>

              <B><c:out value="指定begin和end的迭代:" /></B><br>

            <c:forEach var="fuwa" items="${a}" begin="1" end="3" step="2">

             &nbsp;<c:out value="${fuwa}" /><br>

             </c:forEach>

             <B><c:out value="输出整个迭代的信息:" /></B><br>

             <c:forEach var="fuwa" items="${a}" begin="3" end="4" step="1" varStatus="s">

             &nbsp;<c:out value="${fuwa}" />的四种属性:<br>

             &nbsp;&nbsp;所在位置,即索引:<c:out value="${s.index}" /><br>

             &nbsp;&nbsp;总共已迭代的次数:<c:out value="${s.count}" /><br>

             &nbsp;&nbsp;是否为第一个位置:<c:out value="${s.first}" /><br>

             &nbsp;&nbsp;是否为最后一个位置:<c:out value="${s.last}" /><br>

             </c:forEach>

    </body>

    </html>

【代码解析】:

(1)第13~18行通过Java脚本创建了一个集合对象a,并添加元素。

(2)第19行使用setAttribute()方法把集合存入request范围内。

(3)第22~24行未指定begin和end属性,直接从集合开始遍历到集合结束为止。

(4)第26~28行指定从集合的第二个(index值为1)元素开始,到第四个(index值为3)元素截止(index的值从0开始)。并指定step为2即每隔两个遍历一次。

(5)第30~35指定varStatus的属性名为s,并取出存储的状态信息。

【总结】:

(1)从图中可以看到不使用begin和end的迭代,从集合的第一个元素开始,遍历到最后一个元素。

(2)指定begin的值为1、end的值为3、step的值为2,从第二个开始首先得到晶晶,每两个遍历一次,则下一个显示的结果为莹莹,end为3则遍历结束。

(3)从指定的begin和end的值来看遍历第四个和第五个,因得到莹莹和妮妮。相关状态信息如图所示。

提示:本例使用的list是在JSP页面中使用Java脚本创建的,是因为JSTL缺少创建集合的功能,在开发中一般不会如此,可通过访问数据库得到数据集合,和通过设定JavaBean的值得到数据集合

2.<c:forTokens>

该标签用于浏览字符串,并根据指定的字符将字符串截取。

语法:

<c:forTokens items=”strigOfTokens” delims=””delimiters [var=”name” begin=”begin” end=”end” step=”len” varStatus=”statusName”] >

【参数说明】

(1)items指定被迭代的字符串。

(2)delims指定使用的分隔符。

(3)var指定用来存放遍历到的成员。

(4)begin指定遍历的开始位置(int型从取值0开始)。

(5)end指定遍历结束的位置(int型,默认集合中最后一个元素)。

(6)step遍历的步长(大于0的整型)。

(7)varStatus存放遍历到的成员的状态信息。

【示例代码】:代码9.11实现了遍历一个有符号的字符串,把指定的符号移除。指定begin和end值,并获得遍历到的元素的状态信息。

代码9.11 <c:forTokens>标签的示例:coredemo09.jsp

    <%@ page contentType="text/html;charset=GBK" %>

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

    <html>

    <head>

             <title>JSTL: -- forTokens标签实例</title>

    </head>

    <body>

    <h4><c:out value="forToken实例"/></h4>

    <hr>

             <c:forTokens items="北、京、欢、迎、您" delims="" var="c1">

            <c:out value="${c1}"></c:out>

             </c:forTokens><br>

             <c:forTokens items="123-4567-8854" delims="-" var="t">

             <c:out value="${t}"></c:out>

            </c:forTokens><br>

   <c:forTokens items="1*2*3*4*5*6*7" delims="*" begin="1" end="3" var="n" varStatus="s">

             &nbsp;<c:out value="${n}" />的四种属性:<br>

             &nbsp;&nbsp;所在位置,即索引:<c:out value="${s.index}" /><br>

             &nbsp;&nbsp;总共已迭代的次数:<c:out value="${s.count}" /><br>

             &nbsp;&nbsp;是否为第一个位置:<c:out value="${s.first}" /><br>

             &nbsp;&nbsp;是否为最后一个位置:<c:out value="${s.last}" /><br>

    </c:forTokens>

   </body>

    </html>

【代码解析】:

(1)本示例共实现了3个<c:forToken>循环,10~12行第一个循环实现了遍历给定字符串“北、京、欢、迎、您”,并除去循环中遇到的“、”号。

(2)13~15行第2个循环遍历一串带有分隔符的电话号码,不读取分隔符号,将显示一个字符串。

(3)16~22行第3个循环遍历一个带“*”号的字符串,根据指定的起始位置把元素取出,并显示每个元素的状态信息。

提示:分隔符的作用是根据标识,截取字符串。如果未设定分隔符或在字符串中没有找到分隔付,将把整个元素作为一个元素截取。在实际应用中用于在除去某些符号在页面中显示。

<c:forToken>的属性varStatus的使用同<c:forEach>的使用方法相同,在此就再不表述。


<c:forEach>取Map的值:

<c:forEach var="item" items="${map2}"> 

     ${item.key}

</c:forEach> 

<c:forEach var="item" items="${map2}"> 

     ${item.value}

</c:forEach> 

 

<% 

   List<String> list = new ArrayList<String>(); 

   list.add("first"); 

   list.add("second"); 

   List<String> list2 = new ArrayList<String>();

   list2.add("aaaaaa"); 

   list2.add("bbbbbb"); 

   Map<String,List<String>> map = new HashMap(); 

   map.put("a",list); 

   map.put("b",list2); 

   request.setAttribute("map",map);

 %>

<c:forEach var="item" items="${map['a']}"> 

    ${item} 

</c:forEach> 

<c:forEach var="item" items="${map['b']}"> 

    ${item} 

</c:forEach> 

//如果键是EL中的表达式,则items="${map[表达式]}" 

 


9.2.4 URL操作标签

JSTL包含3个与URL操作有关的标签,分别为:<c:import>、<c:redirect>和<c:url>标签。它们的作用为:显示其他文件的内容、网页导向、产生URL。下面将详细介绍这3个标签的使用方法。

1.<c:import>标签

该标签可以把其他静态或动态文件包含到本JSP页面。同<jsp:include>的区别为:只能包含同一个web应用中的文件。而<c:import>可以包含其他web应用中的文件,甚至是网络上的资源。

语法1:

<c:import url=”url” [context=”context”][ value=”value”]

[scope=”page|request|session|application”] [charEncoding=”encoding”]>

语法2:

<c:import url=”url” varReader=”name” [context=”context”][charEncoding=”encoding”]>

主要参数见表9-3。

表9-3 <c:import>标签参数说明

 

名称

说明

EL

类型

必须

默认值

url

被导入资源的URL路径

Y

String

context

相同服务器下其他的web工程,必须以“"”开头

Y

String

var

以String类型存入被包含文件的内容。

N

String

Scope

var变量的JSP范围

N

String

page

charEncoding

被导入文件的编码格式

Y

String

varReader

以Reader类型存储被包含文件内容

N

String

 

【参数说明】:

(1)URL为资源的路径,当应用的资源不存在时系统会抛出异常,因此该语句应该放在<c:catch></c:catch>语句块中捕获。应用资源有两种方式:绝对路径和相对路径。使用绝对路径示例如下:

<c:import url=”http://www.baidu.com”>

使用相对路径的实例如下:

<c:import url=”aa.txt”>

aa.txt放在同一文件目录。

如果以“/”开头表示应用的根目录下。例如:tomcat应用程序的根目录文件夹为webapps。导入webapps下的文件bb.txt的编写方式为:

<c:import url=”/bb.txt”>

如果访问webapps管理文件夹中其他web应用就要用context属性。

(2)context属性用于在访问其他web应用的文件时,指定根目录。例如,访问root下的index.jsp的实现代码为:

<c:import url=”/index.jsp” context=”/root”>

等同于webapps/root/index.jsp

(3)var、scope、charEncoding、varReader是可选属性。具体使用方式见示例代码。

【示例代码】:代码9.12实现了从绝对路径导入文件和从相对路径导入,同时使用var对象指定用变量来存储文件,并输出存入的文件内容。

代码9.12 <c:import>标签示例:coredemo10.jsp

1     <%@ page contentType="text/html;charset=GBK" %>

2     <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

3     <html>

4     <head>

5              <title>JSTL: -- import标签实例</title>

6     </head>

7     <body>

8     <h4><c:out value="import实例"/></h4>

9     <hr>

10     <h4><c:out value="绝对路径引用的实例" /></h4>

11     <c:catch var="error1">

12     <c:import url="http://www.baidu.com"/>

13    </c:catch>

14    <c:out value="${error1}"></c:out>

15    <hr>

16     <h4>

17     <c:out value="相对路径引用的实例,引用本应用中的文件" /></h4>

18     <c:catch>

19     <c:import url="a1.txt" charEncoding="gbk"/>

20     </c:catch>

21     <hr>

22     <h4><c:out value="使用字符串输出、相对路径引用的实例,并保存在session范围内" /></h4>

23     <c:catch var="error3">

24     <c:import var="myurl" url="a1.txt" scope="session" charEncoding="gbk"></c:import>

25     <c:out value="${myurl}"></c:out>

26     <c:out value="${myurl}" />

27     </c:catch>

28     <c:out value="${error3}"></c:out>

29     </body>

30     </html>

【代码解析】:

(1)第12行使用绝对路径导入百度首页,导入时使用<c:catch></c:catch>(11和12行)捕获异常。

(2)使用相对路径导入同一文件夹下的a1.txt文件,接收的字符编码格式使用charEncoding设置为gbk。

(3)同样导入a1.txt,不同的时使用var定义的变量接收要导入的文件,并存储在session中,如果在其他页面同样也要导入该文件,只须使用<c:out>输出a1.txt的值即可。

【说明】:

(1)在使用绝对路径导入时,因为电脑没有联网所以抛出异常。

(2)使用相对路径输出时,同样是引入的a1.txt文件显示的结果却不相同,这可以说明直接使用<c:import>导入,不设定var参数是直接在页面中显示的文本信息。而使用var参数输出时输出的实现存入的字符串。

提示:读者在练习时可以使用Tomcat的首页来导入url=”http://127.0.0.1:8080”来显示效果。

2.<c:redirect>标签

该标签用来实现了请求的重定向。同时可以在url中加入指定的参数。例如:对用户输入的用户名和密码进行验证,如果验证不成功重定向到登录页面;或者实现web应用不同模块之间的衔接。

【语法1】:

<c:redirect url=”url” [context=”context”]>

【语法2】:

<c:redirect url=”url”[context=”context”]>

<c:param name=”name1” value=”value1”>

</c:redirect>

【参数说明】:

(1)url指定重定向页面的地址,可以是一个string类型的绝对地址或相对地址。

(2)用于导入其他web应用中的页面。

【示例代码】:代码9.13实现了当请求页面时重定向到tomcat首页。

代码9.13 <c:redirect>标签示例:coredemo11.jsp

<%@ page contentType="text/html;charset=GBK" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:redirect url="http://127.0.0.1:8080">

<c:param name="uname">olive</c:param>

<c:param name="password">01234</c:param>

</c:redirect>

【代码解析】

(1)使用重定向与载入页面不同,载入页面时在本页面中插入其他页面,而重定向是请求转发,等于在页面中重新输入了一次url。当重定向到某个页面时浏览器中的地址会发生变化。

(2)使用重定向时不用使用<c:catch>语句,当输入页面访问不到时,浏览器会报错,跟程序运行无关。如果使用重定向时页面定义的内容将不会得到显示。

(3)在重定向时为URL添加了两个参数和参数值:uname=olive和password=01234。

提示:注意图中的URL地址已经发生转变,同时可以看到传入的参数以参数值。

3.<c:url>标签

该标签用于动态生成一个String类型的URL,可以同<c:redirect>标签共同使用,也可以使用html的<a>标签实现超链接。

【语法1】:指定一个url不做修改,可以选择把该url存储在JSP不同的范围中。

<c:url value=”value” [var=”name”][scope=”page|request|session|application”]

[context=”context”]/>

【语法2】:给url加上指定参数及参数值,可以选择以name存储该url。

<c:url value=”value” [var=”name”][scope=”page|request|session|application”]

[context=”context”]>

<c:param name=”参数名” value=”值”>

</c:url>

【示例代码】:代码9.14实现了使用动态生成url实现了网页的超链接。

代码9.14 <c:url>标签示例:coredemo12.jsp

<%@ page contentType="text/html;charset=GBK" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:out value="url标签使用"></c:out>

<h4>使用url标签生成一个动态的url,并把值存入session中.</h4>

<hr>

<c:url value="http://127.0.0.1:8080" var="url" scope="session">

</c:url>

<a href="${url}">Tomcat首页</a>

9.3 I18N格式标签库

JSTL标签提供了对国际化(I18N)的支持,它可以根据发出请求的客户端地域的不同来显示不同的语言。同时还提供了格式化数据和日期的方法。实现这些功能需要I18N格式标签库(I18N-capable formation tags liberary)。引入该标签库的方法为:

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

I18N格式标签库提供了11个标签,这些 标签从功能上可以划分为3类如下:

(1)数字日期格式化。formatNumber标签、formatData标签、parseNumber标签、parseDate标签、timeZone标签、setTimeZone标签。

(2)读取消息资源。bundle标签、message标签、setBundle标签。

(3)国际化。setlocale标签、requestEncoding标签。

接下将详细介绍这些标签的功能和使用方式。

9.3.1 数字日期格式化

fmt详解链接:http://blog.sina.com.cn/s/blog_4f925fc30102dyfe.html

数字日期格式化标签共有6个,用来将数字或日期转换成设定的格式。

1.<frm:formatNumber/>标签

该标签依据特定的区域将数字改变为不同的格式来显示。

【语法1】:

<frm:formatNumber value=”被格式化的数据”[type=”number|currency|percent”]

                                               [pattern=”pattern”]

                                               [currencyCode=”code”]

                                               [currencySymbol=”symbol”]

                                               [groupingUsed=”true|false”]

                                               [maxIntergerDigits=”maxDigits”]

                                               [minIntergerDigits=”minDigits”]

                                               [maxFractionDigits=”maxDigits”]

                                               [minFractionDigits=”minDigits”]

                                               [var=”name”]

                                               [scope=page|request|session|application]

/>

【语法2】:

<frm:formatNumber [type=”number|currency|percent”]

                                               [pattern=”pattern”]

                                               [currencyCode=”code”]

                                               [currencySymbol=”symbol”]

                                               [groupingUsed=”true|false”]

                                               [maxIntergerDigits=”maxDigits”]

                                               [minIntergerDigits=”minDigits”]

                                               [maxFractionDigits=”maxDigits”]

                                               [minFractionDigits=”minDigits”]

                                               [var=”name”]

                                               [scope=page|request|session|application]

被格式化的数据

<frm:formatNumber>

属性说明如表9-4所示。

表9-4 <fmt:formatNumber>标签参数说明

 

名称

说明

EL

类型

必须

默认值

value

要格式化的数据

String

type

指定类型(单位、货币、百分比等)见表

String

number

pattern

格式化的数据样式

String

currencyCode

货币单位代码

String

cuttencySymbol

货币符号($、¥)

String

groupingUsed

是否对整数部分进行分组如(9,999)

boolean

true

maxIntergerDigits

整数部分最对显示多少位数

int

minIntergerDigits

整数部分最少显示多少位

int

maxFractionDigits

小数部分最多显示多少位

int

minFractionDigits

小数部分最少显示多少位

int

var

存储格式化后的数据

String

scope

var的JSP范围

String

page

 

Type属性的类型应用见表9-5.

表9-5 Type的属性类型

 

类型

说明

示例

number

数字格式

0.8

currency

当地货币

¥0.80

percent

百分比格式

80%

 

【示例代码】:代码9.14实现了对数字的格式化、货币的格式、货币的格式化。使用<frm:formatNumber>的各种属性的设定。

代码9.14 <fmt:formatNumber>标签示例:fmtdemo01.jsp

<%@ page language="java" pageEncoding="gbk"%>

<%@ 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>I18N标签库</title>

 </head>

 <body>

 <h4 align="center"><c:out value="<frm:number>标签的使用"></c:out></h4>

 <hr>

 <table border=1 cellpadding="0" cellspacing="0" align="center">

 <tr align="center">

<td width="100">类型 </td>

<td width="100">使用数据</td>

<td width="100">结果</td>

<td width="300">说明</td>

 </tr>

 <tr>

 <td>数字格式化</td><td>108.75</td>

 <td><fmt:formatNumber type="number" pattern="###.#">108.75</fmt:formatNumber></td>

 <td>使用pattern可以定义显示的样式。本例设定为###.#小数部分将使用四舍五入法。</td>

 </tr>

 <tr>

 <td>数字格式化</td><td>9557</td>

 <td><fmt:formatNumber type="number" pattern="#.####E0">9557</fmt:formatNumber></td>

 <td>使用科学计数法。</td> 

 </tr>

 <tr>

 <td>数字格式化</td><td>9557</td>

 <td><fmt:formatNumber type="number" >9557</fmt:formatNumber></td>

 </td>

 <td>使用默认分组。</td>

 </tr>

 <tr>

 <td>数字格式化</td><td>9557</td>

 <td><fmt:formatNumber type="number" groupingUsed="false" >9557</fmt:formatNumber></td>

 <td>不使用分组。</td>

 </tr>

 <tr>

 <td>数字格式化</td><td>9557</td>

 <td><fmt:formatNumber type="number" maxIntegerDigits="3">9557</fmt:formatNumber></td>

 <td>使用位数限定,根据指定的位数显示,其他数字忽略。例如:9不被显示。</td>

 </tr>

 <tr>

 <td>百分比格式化</td><td>0.98</td>

 <td><fmt:formatNumber type="percent">0.98</fmt:formatNumber></td>

 <td>用百分比形式显示一个数据。</td>

 </tr>

 <tr>

 <td>货币格式化</td><td>188.88</td>

 <td><fmt:formatNumber type="currency" >188.8</fmt:formatNumber></td>

<td>将一个数据转化为货币形式输出。</td>

 </tr>

 <tr>

 <td>存储数据</td><td>188.88</td>

 <td><fmt:formatNumber type="currency" var="money">188.8</fmt:formatNumber>

 <c:out value="${money}"></c:out>

 </td>

 <td>存储的money的值为${money} </td>

 </tr>

 </table>

 </body>

</html>

【代码说明】:

(1)从应用角度可以把属性分为三类:数字格式化、货币格式化、百分比格式化。使用type指定类型。

(2)应用于数字格式化的属性有:partten属性、maxIntegerDigits属性、minIntegerDigits属性、maxFractionDigits属性和minFactionDigits属性。其中partten属性在设定格式化样式时会比较准确如:四舍五入、科学计数法的使用。而使用maIntegerDirgits等属性时,只把设定位数以外的数字舍去。

(3)货币格式化可以使用数字格式化的所有属性。如果有必要建议使用partten属性。currencyCode属性和currencySymbol只用于货币格式化。

(4)百分比格式化使用到的属性为type属性、partten属性,设定type属性的类型为percent即可。

(5)使用var属性时,会将格式化后的值存在JSP的某个范围内(一个String类型的字符串包括符号等)。<frm:forNumber>将不再输出格式化后的值可以使用EL表达式输出。

(6)通用属性:type属性、partten属性、var属性和scope属性。

提示:如果给定的数据类型有错误将或产生异常。例如:给定的数据为aa进行类型转化,将使应用程序无法显示。因此在实际应用中显示的格式化应该放入<c:catch/>语句中。

2.<frm:parseNumber>标签

将格式化后的数字、货币、百分比都转化为数字类型。

【语法1】:

<fmt:parseNumber value="number" [type=”number|currency|percent”]

                                                        [pattern=”pattern”]

                                                        [parseLocale=”locale”]                       

                                                        [intergerOnly=”true|false”]

                                                       [scope=”page|request|session|application”]

/>

【语法2】:

<fmt:parseNumber [type=”number|currency|percent”]

                                                        [pattern=”pattern”]

                                                        [parseLocale=”locale”]

                                                        [intergerOnly=”true|false”]

                                                       [scope=”page|request|session|application”]

Number

</fmt:parseNumber>

属性说明见表9-6。

表9-6 <fmt:parseNumber>标签参数说明

 

名称

说明

EL

类型

是否必须

默认值

value

被解析的字符串

String

type

指定单位(数字、货币、百分比)

String

number

pattern

格式样式

String

parseLocale

用来替代默认区域的设定

String,

Java.util.

Locale

默认本地样式

var

存储已经格式化的数据

String

scope

var变量的作用域

String

page

 

<fmt:parseNumber>可以看作是<fmt:formatNumber>的逆运算。相应的参数和类型的配置和使用<fmt:formatNumber>格式化时相同。

【示例代码】:代码9.15实现了从字符串中提取数据,并用合适的数据类型进行存储(浮点性、整型等)。可以对转换后的数据进行加法运算。

代码9.15 <fmt:parseNumber>标签示例:fmtdemo02.jsp

<%@ page language="java" pageEncoding="gbk"%>

<%@ 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>I18N标签库</title>

 </head>

 <body>

 <h4 ><c:out value="<frm:parseNumber>标签的使用"></c:out></h4>

 <hr>

 </body>

 <fmt:formatNumber type="currency" var="money">188.8</fmt:formatNumber>

 <li>格式化前的数据为:<c:out value="${money}"></c:out>

 <fmt:parseNumber var="money" type="currency">${money}</fmt:parseNumber>

 <li>格式化后的数据为:<c:out value="${money}"></c:out>

 <li>可以对格式化的后的数据进行运算: 

 <c:out value="${money+200}"></c:out>

 <li>对百分比进行格式化98%为:

 <fmt:parseNumber type="percent">98%</fmt:parseNumber>

</html>

【代码解析】:

(1)首先使用<fmt:formatNumber>将188.8转换为字符串¥188.8并在page范围内存储一个String类型的变量,变量名为money。

(2)使用<fmt:parseNumber>将¥188.8转化为浮点型的数据188.8并赋值为变量money,

则变量money转变为一个浮点型的值188.8,对188.8进行加运算。

(3)直接对一个百分比数98%进行转化。

提示:<fmt:parseNumber>属性参数的配置和使用同<fmt:formatNumber>标签使用的方式一样。同时,在进行类型转换时如果给出的类型不正确将会出现异常。例如在进行百分比转化时如果没有给type类型或者给出type类型但提供的数据中没有%都会产生异常。因此在实际应用中用<c:catch/>捕获异常。

3.<fmt:formatDate>标签

该标签主要用来格式化日期和时间。

【语法】:

<fmt: formatDate value=”date” [type=”time|date|both”]

                                     [pattern=”pattern”]

                                     [dateStyle=”default|short|medium|long|full”]

                                     [timeStyle=”default|short|medium|long|full”]

                                     [timeZone=”timeZone”]

                                     [var=”name”]

                                     [scope=”page|request|session|application”]

/>

参数说明见表9-7。

表9-7 <fmt:formatDate>标签属性说明

 

属性名

说明

EL

类型

必须

默认值

value

将要格式化的日期对象。

Java.util.Date

type

显示的部分(日期、时间或者两者)。

String

date

partten

格式化的样式。

String

dateStyle

设定日期的显示方式。

String

default

timeStyle

设定时间的显示方式。

String

default

timeZone

设定使用的时区。

String

当地所用时区

var

存储已格式化的日期或时间。

String

scope

指定var存储的JSP范围。

String

 

其中type属性参数说明见表9-8。

表9-8 type属性参数说明

 

参数名

说明

time

只显示时间

date

只显示时期

both

显示日期和时间

 

【示例程序】:代码9.16实现了对日期的格式化,使用了type、dateStyle、timeStyle等属性。

代码9.16 <fmt:formatDate>标签示例:fmtdemo03.jsp

<%@ page language="java" pageEncoding="gbk"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

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

<jsp:useBean id="date" class="java.util.Date"></jsp:useBean>

<html>

 <head>  

    <title>I18N标签库</title>

 </head>

 <body>

<fmt:formatDate value="${date}"></fmt:formatDate><br>

<fmt:formatDate value="${date}" type="both"></fmt:formatDate><br>

<fmt:formatDate value="${date}" type="both" dateStyle="default"

 timeStyle="default"></fmt:formatDate><br>

   <fmt:formatDate value="${date}" type="both" dateStyle="short"

 timeStyle="short"></fmt:formatDate><br>

   <fmt:formatDate value="${date}" type="both" dateStyle="long"

 timeStyle="long"></fmt:formatDate><br>

   <fmt:formatDate value="${date}" type="both" dateStyle="full"

timeStyle="full"></fmt:formatDate><br>

   <fmt:formatDate value="${date}" type="both" dateStyle="full"

timeStyle="full"></fmt:formatDate><br>

   </body>

</html>

【代码解析】:

(1)首先通过配置JavaBean在页面上实例化java.util.Date对象。实现代码如下:

<jsp:useBean id="date" class="java.util.Date"></jsp:useBean>

(2)对日期对象进行格式化时${date}是一个日期对象,如果给value设的值为String时程序会报错。

(3)设置type为both时,将显示日期和时间,同时示例中依次改变dateStyle和timeStyle的值作为比较。

 

使用IE的语言标签可以设置语言种类。

4.<fmt:parseDate>标签

<fmt:parseDate>标签主要将字符串类型的时间或日期转化为时间或日期对象。

【语法1】:

<fmt:parseDate value=”date” [type=”time|date|both”]

                                                        [pattern=”pattern”]

                                                        [parseLocale=”locale”]

                                                       [dateStyle=”default|short|medium|long|full”]

                                                       [timeStyle=”default|short|medium|long|full”]

                                                        [timeZone=”timezone”]

                                                        [var=”name”]

                                                       [scope=”page|request|session|application”]

/>

【语法2】:

<fmt:parseDate [type=”time|date|both”]

                                                        [pattern=”pattern”]

                                                        [parseLocale=”locale”]

                                                       [dateStyle=”default|short|medium|long|full”]

                                                       [timeStyle=”default|short|medium|long|full”]

                                                        [timeZone=”timezone”]

                                                        [var=”name”]

                                                       [scope=”page|request|session|application”]

Date

</fmt:parseDate>

【参数说明】参数说明见表9-9.

表9-9 <fmt:parseData>标签属性说明

 

属性名

说明

EL

类型

必须

默认值

value

将要格式化的日期时间

String

type

字符串的类型(日期、时间或全部)

EL

String

date

pattern

字符串使用的时间样式

String

parseLocale

取代默认地区设定

String

默认地区

dateStyle

字符串使用的日期显示方式

String

default

timeStyle

字符串使用的时间显示格式

String

default

timeZone

使用的时区

String

当地区时

var

使用var定义的名字保存对象

String

scope

var的JSP范围

String

page

 

【示例代码】:代码9.16实现了以下功能:首先,使用了<fmt:formatDate>把一个日期对象格式化成一个日期的字符串,并把该字符串以参数名为a存储page范围内。其次,使用<fmt:parseDate>方法把a的值(字符串)格式化成一个Date并以参数名为b存储在page范围内。最后,使用Java脚本证明生成的b为对象。

代码9.16:<fmt:formatDate>标签示例:fmtdemo04.jsp

<%@ page language="java" pageEncoding="gbk"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

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

<jsp:useBean id="date" class="java.util.Date"></jsp:useBean>

<html>

 <head>  

    <title>I18N标签库</title>

 </head>

 <body>

   <H4><c:out value="<frm:parseDate>标签的使用"></c:out></H4>

   <hr>

<fmt:formatDate value="${date}" var="a" type="both"

dateStyle="full" timeStyle="full"></fmt:formatDate>

<fmt:parseDate var="b" type="both" dateStyle="full" timeStyle="full">

${a}

</fmt:parseDate>

   <%

   out.println(pageContext.getAttribute("b").toString());

   out.println("<br>");

   out.println(pageContext.getAttribute("b").hashCode());

   %>

   </body>

</html>

【代码解析】:

(1)使用<fmt:formatDate>把日期对象格式化成字符串。

(2)使用<fmt:parseDate>把字符串对象转化为日期对象,注意同(1)中的参数对比,可以发现两者是一个互逆的过程。

(3)使用Java脚本进行测试Date对象的toString()方法可以输出时间字符串。hashCode()可以得到一个对象的hashCode。该方法只能应用于对象,因此可以证明得到的是一个日期对象。

提示:<fmt:formatDate>和<fmt:parseDate>是相反的运算过程,可以对照学习。本例中的Java脚本的作用是为了证明生成的的确是一个对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值