JSTL标签的使用
JSP 标准标签库(JSP Standard Tag Library,JSTL)
JSTL标签库的使用是为类弥补html表的不足,规范自定义标签的使用而诞生的。在告别modle1模式开发应用程序后,人们开始注重软件的分层设计,不希望在jsp页面中出现java逻辑代码,同时也由于自定义标签的开发难度较大和不利于技术标准化产生了自定义标签库。JSTL标签库可分为5类:
核心标签库
I18N格式化标签库
SQL标签库
XML标签库
函数标签库
使用jstl需要导入两个jar包
jstl-1.2.jar和standard-1.1.2.jar
一、核心标签库
JSTL的核心标签库标签共13个,从功能上可以分为4类:表达式控制标签、流程控制标签、循环标签、URL操作标签。使用这些标签能够完成JSP页面的基本功能,减少编码工作。
在JSP页面引入核心标签库的代码为:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
(1)表达式控制标签:out标签、set标签、remove标签、catch标签。
1.<c:out>标签
功能:用来显示数据对象(字符串、表达式)的内容或结果。
语法1:<c:out value=”要显示的数据对象” [escapeXml=”true|false”] [default=”默认值”]>
语法2:<c:out value=”要显示的数据对象” [escapeXml=”true|false”]>默认值</c:out>
这两种方式没有本质的区别,只是格式上的差别。标签的属性介绍如下。
value:指定要输出的变量或表达式。
escapeXml:设定是否转换特殊字符(如<、>等一些转义字符),在默认值为true的情况下直接在输出<的,如果改为false将会进行转义输出“<”等。
default:为默认输出结果。如果使用表达式得到的结果为null(注意与空区别),将会输出默认结果。
示例代码:
<li>(1)<c:out value="北京源智天下科技有限公司"></c:out></li>
<li>(2)<c:out value="<未使用字符转义>" /></li>
<li>(3)<c:out value="<使用字符转义>" escapeXml="false"></c:out></li>
<li>(4)<c:out value="${null}">使用了默认值</c:out></li>
<li>(5)<c:out value="${null}"></c:out></li>
2.<c:set>标签
功能:主要用于将变量存取于JSP范围中或JavaBean属性中。
语法1:存值,把一个值放在指定(page、session等)的map中。
<c:set value=”值1” var=”name1” [scope=”page|request|session|application”]>
含义:把一个变量名为name1值为“值1”的变量存储在指定的scope范围内。
语法2:
<c:set var=”name2” [scope=”page|request|session|application”]>值2</c:set>
含义:把一个变量名为name2,值为值2的变量存储在指定的scope范围内。
语法3:
<c:set value=”值3” target=”JavaBean对象” property=”属性名”/>
含义:把一个值为“值3”赋值给指定的JavaBean的属性名。相当与setter()方法。
语法4:
<c:set target=”JavaBean对象” property=”属性名”>值4</c:set>
含义:把一个值4赋值给指定的JavaBean的属性名。
示例代码:
<li>把一个值放入session中。<c:set value="coo" var="name1" scope="session"></c:set>
<li>从session中得到值:${sessionScope.name1 }
<li>把另一个值放入application中。<c:set var="name2" scope="application">olive</c:set>
<li> 使用out标签和EL表达式嵌套得到值:<c:out value="${applicationScope.name2}">未得到name的值</c:out></li>
<li>未指定scope的范围,会从不同的范围内查找得到相应的值:${name1 }、${name2 }
<jsp:useBean id="person" class="org.olive.Person" /> <!--使用JSP的指令元素指定要使用的JavaBean。必须要实例化bean-->
<c:set target="${person}" property="name">maverick</c:set>
<c:set target="${person}" property="age">25</c:set>
<c:set target="${person}" property="sex">男</c:set>
<c:set target="${person}" property="home">china</c:set>
<li>使用的目标对象为:${person }
<li>从Bean中获得的name值为:<c:out value="${person.name}"></c:out>
<li>从Bean中获得的age值为:<c:out value="${person.age}"></c:out>
<li>从Bean中获得的sex值为:<c:out value="${person.sex}"></c:out>
<li>从Bean中获得的home值为:<c:out value="${person.home}"></c:out>
3.<c:remove>标签
功能:主要用来从指定的JSP范围内移除指定的变量。
语法:<c:remove var=”变量名” [scope=”page|request|session|application”]/>其中var属性是必须的,scope可以以省略。
代码示例:
<li><c:set var="name" scope="session">olive</c:set> <!--使用set标签向session中插入三个值:name值为olive、age值为25、sex值为男。-->
<li><c:set var="age" scope="session">25</c:set>
<li><c:set var="sex" scope="session">男</c:set>
<li><c:out value="${sessionScope.name}"></c:out> <!--使用out和EL表达式输出name、age、sex的值。-->
<li><c:out value="${sessionScope.age}"></c:out>
<li><c:out value="${sessionScope.sex}"></c:out>
<li><c:remove var="age"/> <!--使用remove标签移除age的值-->
<li><c:out value="${sessionScope.name}"></c:out> <!--使用out和EL表达式输出name、age、sex的值,作为比较-->
<li><c:out value="${sessionScope.age}"></c:out>
<li><c:out value="${sessionScope.sex}"></c:out>
4.<c:catch>标签
功能:用来处理JSP页面中产生的异常,并将异常信息存储。
语法:
<c:catch var=”name1”>
容易产生异常的代码
</c:catch>
参数说明:
var表示由用户定义存取异常信息的变量的名称。省略后也可以实现异常的捕获,就不能显示的输出异常信息。
示例代码:
<c:catch var=”error”> <!--把容易产生异常的代码放在<c:catch></c:catch>中,自定义一个变量error用于存储异常信息。-->
<c:set target="Dank" property="hao"></c:set> <!--实现了一段异常代码,向一个不存在的JavaBean中插入一个值。-->
</c:catch>
<c:out value="${errors}"/> <!--用EL表达式得到error的值,并使用<c:out>标签输出。-->
(2)流程控制标签:if标签、choose标签、when标签、otherwise标签。
流程控制标签主要用于对页面简单业务逻辑进行控制。流程控制标签包含有4个:<c:if>标签、<c:choose>标签、<c:when>标签和<c:otherwise>标签。
1.<c:if>标签
功能:<c:if>同程序中的if作用相同,用来实现条件控制。
语法1:<c:if test=”条件1” var=”name” [scope=”page|request|session|application”]>
语法2:<c:if test=”条件2” var=”name”[scope=”page|request|session|application”]>
参数说明:
(1)test属性用于存放判断的条件,一般使用EL表达式来编写。
(2)var指定名称用来存放判断的结果类型为true或false。
(3)scope用来存放var属性存放的范围。
使用场景:
在开发中经常会出现不同用户的权限,首先对用户名进行判断(包括进行数据库验证,该功能可以由JavaBean实现,使用EL表达式得到一个布尔型的结果),
把判断的结果存放在不同的JSP范围内(比如常用的session内),这样在每个页面都可以得到该用户的权限信息,根据不同权限的用户显示不同的结果。
(3)循环标签:forEach标签、forTokens标签。
(4)URL操作标签:import标签、url标签、redirect标签。
示例代码:
<c:if test="${param.uname=='admin' }" var=”adminchock”>
<c:out value="管理员欢迎您!"></c:out>
</c:if>
2.<c:choose>、<c:when>和<c:otherwise>标签
功能:这3个标签通常情况下是一起使用的,<c:choose>标签作为<c:when>和<c:otherwise>标签的父标签来使用。
语法1:
<c:choose>
<c:when>
…..//业务逻辑1
<c:otherwise>
…..//业务逻辑2
<c:otherwise>
….//业务逻辑3
</c:choose>
语法2:
<c:when text=”条件”>
表达式
</c:when>
语法3:
<c:otherwise>
表达式
</c:otherwise>
参数说明:
(1)语法1为3个标签的嵌套使用方式,<c:choose>标签只能和<c:when>标签共同使用。
(2)语法2为<c:when>标签的使用方式,该标签都条件进行判断,一般情况下和<c:choose>共同使用。
(3)<c:otherwise>不含有参数,只能跟<c:when>共同使用,并且在嵌套中只允许出现一次。
示例代码:
<c:set var="score">85</c:set>
<c:choose>
<c:when test="${score>=90}">
你的成绩为优秀!
</c:when>
<c:when test="${score>=70&&score<90}">
您的成绩为良好!
</c:when>
<c:when test="${score>60&&score<70}">
您的成绩为及格
</c:when>
<c:otherwise>
对不起,您没有通过考试!
</c:otherwise>
</c:choose>
(3)循环标签:forEach标签、forTokens标签。
循环标签主要实现迭代操作。主要包含两个标签:<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设定变量名,该变量用于存放集合中元素的信息。
index int 当前循环索引号 从0开始
count int 成员总数 从1开始
first boolean 当前成员是否首位成员
last boolean 当前成员是否末尾成员
(4)begin、end用于指定遍历的起始位置和终止位置(可选)。
(5)step指定循环的步长。
示例代码:
略
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存放遍历到的成员的状态信息。
示例代码:
<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">
<c:out value="${n}" />的四种属性:<br>
所在位置,即索引:<c:out value="${s.index}" /><br>
总共已迭代的次数:<c:out value="${s.count}" /><br>
是否为第一个位置:<c:out value="${s.first}" /><br>
是否为最后一个位置:<c:out value="${s.last}" /><br>
</c:forTokens>
<!--提示:
分隔符的作用是根据标识,截取字符串。如果未设定分隔符或在字符串中没有找到分隔付,
将把整个元素作为一个元素截取。在实际应用中用于在除去某些符号在页面中显示。
-->
<c:forTokens items="12345678854" delims="" var="t">
<c:out value="${t}"></c:out>
</c:forTokens>
(4)URL操作标签:import标签、url标签、redirect标签。
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”]>
参数说明:
url:需要导入页面的 URL
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属性。
context:Web Context 该属性用于在不同的 Context 下导入页面,当出现 context 属性时,必须以“ / ”开头,此时也需要 url 属性以“ / ”开头(可选)
context属性用于在访问其他web应用的文件时,指定根目录。例如,访问root下的index.jsp的实现代码为:
<c:import url=”/index.jsp” context=”/root”>
等同于webapps/root/index.jsp
charEncoding:导入页面的字符集(可选)
var:可以定义导入文本的变量名(可选)
scope:导入文本的变量名作用范围(可选)
varReader:接受文本的 java.io.Reader 类变量名(可选)
示例代码:
<h4><c:out value="import实例"/></h4>
<hr>
<h4><c:out value="绝对路径引用的实例" /></h4>
<c:catch var="error1">
<c:import url="http://localhost/b2c0911/vegetables/listproductlogout.html?current_page=1"/>
</c:catch>
<c:out value="${error1}"></c:out>
<hr>
<h4><c:out value="相对路径引用的实例,引用本应用中的文件" /></h4>
<c:catch>
<c:import url="a1.txt" charEncoding="gbk"/>
</c:catch>
<hr>
<h4><c:out value="使用字符串输出、相对路径引用的实例,并保存在session范围内" /></h4>
<c:catch var="error3">
<c:import var="myurl" url="a1.txt" scope="session" charEncoding="gbk"></c:import>
<c:out value="${myurl}"></c:out>
<c:out value="${myurl}" />
</c:catch>
<c:out value="${error3}"></c:out>
说明:
(1)在使用绝对路径导入时,因为电脑没有联网所以抛出异常。
(2)使用相对路径输出时,同样是引入的a1.txt文件显示的结果却不相同,这可以说明直接使用<c:import>导入,不设定var参数是直接在页面中显示的文本信息。而使用var参数输出时输出的实现存入的字符串。
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应用中的页面。
示例代码:
<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。
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>
示例代码:
<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>
二、I18N格式化标签库
JSTL标签提供了对国际化(I18N)的支持,它可以根据发出请求的客户端地域的不同来显示不同的语言。同时还提供了格式化数据和日期的方法。<fmt:parseNumber> 和 <fmt:parseDate> 两组标签应该尽量少用
实现这些功能需要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标签。
数字日期格式化标签共有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>
【属性和说明】:
value:格式化的数字,该数值可以是 String 类型或 java.lang.Number 类型的实例
type:格式化的类型
number 数字格式 0.8
currency 当地货币 ¥0.80
percent 百分比格式 80%
pattern:格式化模式
currencyCode:货币单位代码
cuttencySymbol:货币符号($、¥)
groupingUsed:是否对整数部分进行分组如(9,999)
var:结果保存变量,存储格式化后的数据
scope:变量的作用范围 scope=page|request|session|application
maxIntegerDigits:整数部分最对显示多少位数
minIntegerDigits:整数部分最少显示多少位
maxFractionDigits:小数部分最多显示多少位
minFractionDigits:小数部分最少显示多少位
【代码示例】:
<!--使用pattern可以定义显示的样式。本例设定为###.#小数部分将使用四舍五入法。-->
<fmt:formatNumber type="number" pattern="###.#">108.75</fmt:formatNumber>
<!--使用科学计数法。-->
<fmt:formatNumber type="number" pattern="#.####E0">9557</fmt:formatNumber>
<!-- 使用默认分组。-->
<fmt:formatNumber type="number">9557</fmt:formatNumber>
<!-- 不使用分组。-->
<fmt:formatNumber type="number" groupingUsed="false">9557</fmt:formatNumber>
<!-- 使用位数限定,根据指定的位数显示,其他数字忽略。例如:9不被显示。-->
<fmt:formatNumber type="number" maxIntegerDigits="3">9557</fmt:formatNumber>
<!-- 用百分比形式显示一个数据。-->
<fmt:formatNumber type="percent">0.98</fmt:formatNumber>
<!-- 将一个数据转化为货币形式输出。-->
<fmt:formatNumber type="currency">188.8</fmt:formatNumber>
<!-- 存储的money的值为${money}-->
<fmt:formatNumber type="currency" var="money">188.8</fmt:formatNumber>
<c:out value="${money}"></c:out>
<fmt:formatNumber value="12" type="currency" pattern="$.00"/> -- $12.00
<fmt:formatNumber value="12" type="currency" pattern="$.0#"/> -- $12.0
<fmt:formatNumber value="1234567890" type="currency"/> -- $1,234,567,890.00(货币的符号和当前web服务器的 local 设定有关)
<fmt:formatNumber value="123456.7891" pattern="#,#00.0#"/> -- 123,456.79
<fmt:formatNumber value="123456.7" pattern="#,#00.0#"/> -- 123,456.7
<fmt:formatNumber value="123456.7" pattern="#,#00.00#"/> -- 123,456.70
<fmt:formatNumber value="12" type="percent" /> -- 1,200% (type 可以是currency、 number、 和percent)。
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>
【参数说明】:
value:将被解析的字符串
type:解析格式化的类型
pattern:解析格式化模式
var:结果保存变量,类型为 java.lang.Number
scope:变量的作用范围
parseLocale:以本地化的形式来解析字符串,该属性的内容应为 String 或 java.util.Locale 类型的实例
【代码示例】:
<fmt:formatNumber type="currency" var="money">188.8</fmt:formatNumber>
<!--格式化前的数据为:-->
<c:out value="${money}"></c:out>
<fmt:parseNumber var="money" type="currency">${money}</fmt:parseNumber>
<!--格式化后的数据为:-->
<c:out value="${money}"></c:out>
<!--可以对格式化的后的数据进行运算:-->
<c:out value="${money+200}"></c:out>
<!--对百分比进行格式化98%为:-->
<fmt:parseNumber type="percent">98%</fmt:parseNumber>
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”]
/>
【属性说明】:
value:将要格式化的日期对象。格式化的日期,该属性的内容应该是 java.util.Date 类型的实例
type:显示的部分(日期、时间或者两者)。格式化的类型(默认date)
time 只显示时间
date 只显示时期
both 显示日期和时间
pattern:格式化的样式。
dateStyle:设定日期的显示方式。
timeStyle:设定时间的显示方式。
timeZone:指定格式化日期的时区(默认当地所用时区)
var:结果保存变量,存储已格式化的日期或时间。
scope:变量的作用范围,指定var存储的JSP范围。
【代码示例】:
<!-- 首先通过配置JavaBean在页面上实例化java.util.Date对象 -->
<jsp:useBean id="date" class="java.util.Date"></jsp:useBean>
<!-- 首先通过配置JavaBean在页面上实例化java.util.Date对象 -->
<fmt:formatDate value="${date}"></fmt:formatDate><br>
${date }
<fmt:formatDate value="${date}" type="both"></fmt:formatDate><br>
${date }
<fmt:formatDate value="${date}" type="both" dateStyle="default" timeStyle="default"></fmt:formatDate><br>
${date }
<fmt:formatDate value="${date}" type="both" dateStyle="short" timeStyle="short"></fmt:formatDate><br>
${date }
<fmt:formatDate value="${date}" type="both" dateStyle="long" timeStyle="long"></fmt:formatDate><br>
${date }
<fmt:formatDate value="${date}" type="both" dateStyle="full" timeStyle="full"></fmt:formatDate><br>
${date }
<fmt:formatDate value="${time}" type="both" dateStyle="full" timeStyle="full"></fmt:formatDate><br>
${date }
4.<fmt:parseDate>标签
【功能】:
<fmt:parseDate>标签主要将字符串类型的时间或日期转化为时间或日期对象。用于解析一个日期,并将结果作为 java.lang.Date 类型的实例返回
【语法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>
【属性说明】:
value:将被解析的字符串
type:解析格式化的类型
pattern:解析格式化模式
var:结果保存变量,类型为 java.lang.Date
scope:变量的作用范围
parseLocale:以本地化的形式来解析字符串,该属性的内容为 String 或 java.util.Locale 类型的实例
timeZone:指定解析格式化日期的时区
【示例代码】:
<jsp:useBean id="date" class="java.util.Date"></jsp:useBean>
<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());
%>
5.<fmt:setTimeZone>标签
【功能】:
该标签用于设定默认时区或者将时区存储在指定的JSP范围内。
【语法】:
<fmt:setTimeZone value=”value” [var=”name”][scope=”page|request|session|application”]/>
【参数说明】:
value 使用的时区 StringJava.util.TimeZone
var 使用var定义的参数名保存值
scope 存储var的JSP范围
value用来设定使用的时区,例如中国使用的时区为CST,其他的还有EST、PST等。可以把时区存储在指定的JSP范围内,
例如存储在session中,用户访问的所有页面都可以显示使用的设定的时区下对应的时间。
【示例代码】
<fmt:setTimeZone value=”EST” scope=”session”/>
提示:有关TimeZone的说明见JDK帮助文档的java.util.TimeZone类。
6.<fmt:timeZone>标签
【功能】:
该标签主要用于设置标签体内使用的时区。
【语法】:
<fmt:timeZone value=”timeZone”>
…..
</fmt:timeZone>
使用<fmt:timeZone></fmt:timeZone>只会应用到标签体内使用的时区,对标签外部将不产生影响。
(2)读取消息资源。bundle标签、message标签、setBundle标签。
读取消息资源用到的标签主要有4个:<fmt:message>标签、<fmt:param>标签、<fmt:bundle>标签和<fmt:setBundle>标签。主要用于从资源文件中读取信息。
1.<fmt:bundle>标签
【功能】:
该标签主要用于将资源文件绑定于它的标签体中的显示。
【语法】:
<fmt:bundle basename=”name”[prefix=”prefix”]>
….标签主题
</fmt:bundle>
【参数说明】:
basename:指定使用的资源文件的名称
prefix:前置关键字
2.<fmt:setBundle>标签
【功能】:
该标签主要用于绑定资源文件或者把资源文件保存在指定的JSP范围内。
【语法】:
<fmt:setBundle basename=”name” [var=”name”]
[scope=”page|request|session|application”]
>
【参数说明】:
basename:指定使用的资源文件的名称
var:指定将资源文件保存的名称
scope:设定将资源文件保存的JSP范围
3.<fmt:message>标签
【功能】:
该标签主要负责读取本地资源文件,从指定的消息文本资源文件中读取键值,并且可以将键值保存在指定的JSP范围内。
【语法1】:
<fmt:message key=”keyName”[bundle=”bundle”]
[scope=”page|request|session|application”]
/>
【语法2】:
<fmt:message key=”keyName”[bundle=”bundle”]
[scope=”page|request|session|application”]
>
<fmt:param/>
</fmt:message>
【语法3】:
<fmt:message key=”keyName”[bundle=”bundle”]
[scope=”page|request|session|application”]
>
key<fmt:param/>
…
</fmt:message>
【参数说明】:
key:指定键值的名称(索引
bundle:指定消息文本的来源
var:指定存储键值的变量名
scope:指定var的作用域
【示例代码】:
<%--
<fmt:bundle basename=".properties类型文件路径及去掉后缀的名称">
<fmt:message key=".properties键值对的键(key)">
<fmt:param value="传入的第二个参数对应properties文件value中的{0}">
</fmt:param>
<fmt:param value="传入的第二个参数对应properties文件value中的{1}">
</fmt:param>
</fmt:message>
</fmt:bundle>
src下有文件 abc.properties
文件内容为:
msg=您好,我是{0} , 我不是{1}
password=1234567890
--%>
<!-- 加载资源文件后根据key传入两个参数并将value值读出 -->
<fmt:bundle basename="abc">
<fmt:message key="msg">
<fmt:param value="张三">
</fmt:param>
<fmt:param value="李四">
</fmt:param>
</fmt:message>
</fmt:bundle>
<!-- 加载资源文件abc.properties后 定义一个变量m-->
<fmt:setBundle basename="abc" var="m"/>
<!-- 根据key从上面变量m中读出value 并定义为xyz变量 -->
<fmt:message key="password" bundle="${m}" var="xyz"></fmt:message>
<br>
<%=request.getSession().getAttribute("xyz") %>
<br>
${xyz }
(3)国际化。setlocale标签、requestEncoding标签。
国际化这个分类中共包含两个标签:用于设定语言地区<fmt:setLocale/>和用于设定请求的字符编码的<fmt:requestEncoding>标签。
1.<fmt:setLocale/>标签
【功能】:
<fmt:setLocale>标签用来设定用户语言区域。
【语法】:
<fmt:setLocale value=”locale”[variant=”variant”]
[scope=”page|request|session|application”]>
【参数说明】:
value:指定区域代码
variant:操作系统的类型
scope:设定时区的作用范围
alue属性用来指定使用的语言代码,可以从浏览器的【工具】---【Internet选项】---【语言】---【添加】中查看浏览器支持的语言种类及语言代码。
例如:中文(zh_cn)、台湾(zh_tw)、香港(zh_mo)等。
【示例代码】:
<jsp:useBean id="date" class="java.util.Date"></jsp:useBean>
<H4>
<c:out value="<fmt:setlocale>标签的使用"></c:out>
</H4>
<hr>
<fmt:setLocale value="en_us" />
英文:
<fmt:formatDate value="${date}" type="both" dateStyle="full"
timeStyle="full" />
<hr>
<fmt:setLocale value="zh_cn" />
中文:
<fmt:formatDate value="${date}" type="both" dateStyle="full"
timeStyle="full" />
<hr>
<fmt:setLocale value="zh_TW" />
中国台湾:
<fmt:formatDate value="${date}" type="both" dateStyle="full"
timeStyle="full" />
2.<fmt:requestEncoding>标签
【功能】:
该标签用于设定请求的编码格式。功能同servletRequest.setCharacterEncoding()方法相同。
【语法】:
<fmt:requestEncoding [value=”charEncoding”]/>
【参数说明】:
value属性用来指定使用的编码集例如:gbk、gb2312等。当没有给出value的值时将会自动搜索取寻找合适的编码方式,因此能够很好的解决中文乱码问题。