el/jstl学习

.与 [ ] 运算符

EL 提供 . 和 [ ] 两种运算符来导航数据。下列两者所代表的意思是一样的:

${sessionScope.user.sex}等于${sessionScope.user["sex"]}

和 [ ] 也可以同时混合使用,如下:

${sessionScope.shoppingCart[0].price}

回传结果为shoppingCart中第一项物品的价格。

不过,以下两种情况,两者会有差异:

(1) 当要存取的属性名称中包含一些特殊字符,如. 或 – 等并非字母或数字的符号,就一定要使用 [ ],例如:${user.My-Name }

上述是不正确的方式,应当改为:${user["My-Name"] }

(2) 我们来考虑下列情况:

${sessionScope.user[data]}

此时,data 是一个变量,假若data的值为"sex"时,那上述的例子等于${sessionScope.user.sex};

假若data 的值为"name"时,它就等于${sessionScope.user.name}。因此,如果要动态取值时,就可以用上述的方法来做,.无法做到动态取值。

 EL 变量

EL 存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。因为我们并没有指定哪一个范围的username,所以它的默认值会先从Page 范围找,假如找不到,再依序到Request、Session、Application范围。

自动转变类型

${param.count + 20}

假若窗体传来count的值为10时,那么上面的结果为30。之前没接触过JSP 的读者可能会认为上面的例子是理所当然的,但是在JSP 1.2 之中不能这样做,原因是从窗体所传来的值,它们的类型一律是String,所以当你接收之后,必须再将它转为其他类型,如:int、float 等等,然后才能执行一些数学运算,下面是之前的做法:

所以,注意不要和java的语法(当字符串和数字用“+”链接时会把数字转换为字符串)搞混淆喽 。

EL 隐含对象

JSP有9个隐含对象,而EL也有自己的隐含对象。EL隐含对象总共有11 个

隐含对象

类型

说明

PageContext

javax.servlet.ServletContext

表示此JSP的PageContext

PageScope

java.util.Map

取得Page范围的属性名称所对应的值

RequestScope

java.util.Map

取得Request范围的属性名称所对应的值

sessionScope

java.util.Map

取得Session范围的属性名称所对应的值

applicationScope

java.util.Map

取得Application范围的属性名称所对应的值

param

java.util.Map

如同ServletRequest.getParameter(String name)。回传String类型的值

paramValues

java.util.Map

如同ServletRequest.getParameterValues(String name)。回传String[]类型的值

header

java.util.Map

如同ServletRequest.getHeader(String name)。回传String类型的值

headerValues

java.util.Map

如同ServletRequest.getHeaders(String name)。回传String[]类型的值

cookie

java.util.Map

如同HttpServletRequest.getCookies()

initParam

java.util.Map

如同ServletContext.getInitParameter(String name)。回传String类型的值

 不过有一点要注意的是如果你要用EL输出一个常量的话,字符串要加双引号,不然的话EL会默认把你认为的常量当做一个变量来处理,这时如果这个变量在4个声明范围不存在的话会输出空,如果存在则输出该变量的值。


pageContext

我们可以使用 ${pageContext}来取得其他有关用户要求或页面的详细信息。下表列出了几个比较常用的部分

Expression

说明

${pageContext.request.queryString}

取得请求的参数字符串

${pageContext.request.requestURL}

取得请求的URL,但不包括请求之参数字符串,即servlet的HTTP地址。

${pageContext.request.contextPath}

服务的webapplication的名称

${pageContext.request.method}

取得HTTP的方法(GET、POST)

${pageContext.request.protocol}

取得使用的协议(HTTP/1.1、HTTP/1.0)

${pageContext.request.remoteUser}

取得用户名称

${pageContext.request.remoteAddr}

取得用户的IP地址

${pageContext.session.new}

判断session是否为新的,所谓新的session,表示刚由server产生而client尚未使用

${pageContext.session.id}

取得session的ID

${pageContext.servletContext.serverInfo}

取得主机端的服务信息

 这个对象可有效地改善代码的硬编码问题,如页面中有一A标签链接访问一个SERVLET,如果写死了该SERVLET的HTTP地址那么如果当该SERVLET的SERVLET-MAPPING改变的时候必须要修改源代码,这样维护性会大打折扣。

EL算术运算

表达式语言支持的算术运算符和逻辑运算符非常多,所有在Java语言里支持的算术运算符,表达式语言都可以使用;甚至Java语言不支持的一些算术运算符和逻辑运算符,表达式语言也支持。

 

Code

<%@ page contentType="text/html; charset=gb2312"%>
<html>
<head>
<title>表达式语言 - 算术运算符</title>
</head>
<body>
<h2>表达式语言 - 算术运算符</h2>
<hr>
<table border="1" bgcolor="aaaadd">
<tr>
<td><b>表达式语言</b></td>
<td><b>计算结果</b></td>
</tr>
<!-- 直接输出常量 -->
<tr>
<td>\${1}</td>
<td>${1}</td>
</tr>
<!-- 计算加法 -->
<tr>
<td>\${1.2 + 2.3}</td>
<td>${1.2 + 2.3}</td>
</tr>
<!-- 计算加法 -->
<tr>
<td>\${1.2E4 + 1.4}</td>
<td>${1.2E4 + 1.4}</td>
</tr>
<!-- 计算减法 -->
<tr>
<td>\${-4 - 2}</td>
<td>${-4 - 2}</td>
</tr>
<!-- 计算乘法 -->
<tr>
<td>\${21 * 2}</td>
<td>${21 * 2}</td>
</tr>
<!-- 计算除法 -->
<tr>
<td>\${3/4}</td>
<td>${3/4}</td>
</tr>
<!-- 计算除法 -->
<tr>
<td>\${3 div 4}</td>
<td>${3 div 4}</td>
</tr>
<!-- 计算除法 -->
<tr>
<td>\${3/0}</td>
<td>${3/0}</td>
</tr>
<!-- 计算求余 -->
<tr>
<td>\${10%4}</td>
<td>${10%4}</td>
</tr>
<!-- 计算求余 -->
<tr>
<td>\${10 mod 4}</td>
<td>${10 mod 4}</td>
</tr>
<!-- 计算三目运算符 -->
<tr>
<td>\${(1==2) ? 3 : 4}</td>
<td>${(1==2) ? 3 : 4}</td>
</tr>
</table>
</body>
</html>


<%@ page contentType="text/html; charset=gb2312"%>
<html>
<head>
<title>表达式语言 - 算术运算符</title>
</head>
<body>
<h2>表达式语言 - 算术运算符</h2>
<hr>
<table border="1" bgcolor="aaaadd">
<tr>
<td><b>表达式语言</b></td>
<td><b>计算结果</b></td>
</tr>
<!-- 直接输出常量 -->
<tr>
<td>\${1}</td>
<td>${1}</td>
</tr>
<!-- 计算加法 -->
<tr>
<td>\${1.2 + 2.3}</td>
<td>${1.2 + 2.3}</td>
</tr>
<!-- 计算加法 -->
<tr>
<td>\${1.2E4 + 1.4}</td>
<td>${1.2E4 + 1.4}</td>
</tr>
<!-- 计算减法 -->
<tr>
<td>\${-4 - 2}</td>
<td>${-4 - 2}</td>
</tr>
<!-- 计算乘法 -->
<tr>
<td>\${21 * 2}</td>
<td>${21 * 2}</td>
</tr>
<!-- 计算除法 -->
<tr>
<td>\${3/4}</td>
<td>${3/4}</td>
</tr>
<!-- 计算除法 -->
<tr>
<td>\${3 div 4}</td>
<td>${3 div 4}</td>
</tr>
<!-- 计算除法 -->
<tr>
<td>\${3/0}</td>
<td>${3/0}</td>
</tr>
<!-- 计算求余 -->
<tr>
<td>\${10%4}</td>
<td>${10%4}</td>
</tr>
<!-- 计算求余 -->
<tr>
<td>\${10 mod 4}</td>
<td>${10 mod 4}</td>
</tr>
<!-- 计算三目运算符 -->
<tr>
<td>\${(1==2) ? 3 : 4}</td>
<td>${(1==2) ? 3 : 4}</td>
</tr>
</table>
</body>
</html>



 上面页面中示范了表达式语言所支持的加、减、乘、除、求余等算术运算符的功能,读者可能也发现了表达式语言还支持div、mod等运算符。而且表达式语言把所有数值都当成浮点数处理,所以3/0的实质是3.0/0.0,得到结果应该是Infinity。

 

如果需要在支持表达式语言的页面中正常输出“$”符号,则在“$”符号前加转义字符“\”,否则系统以为“$”是表达式语言的特殊标记。

EL关系运算符

关系运算符

说明

范例

结果

== 或 eq

等于

${5==5}或${5eq5}

true

!= 或 ne

不等于

${5!=5}或${5ne5}

false

< 或 lt

小于

${3<5}或${3lt5}

true

> 或 gt

大于

${3>5}或{3gt5}

false

<= 或 le

小于等于

${3<=5}或${3le5}

true

>= 或 ge

大于等于

5}或${3ge5}

false

表达式语言不仅可在数字与数字之间比较,还可在字符与字符之间比较,字符串的比较是根据其对应UNICODE值来比较大小的。

注意:在使用EL 关系运算符时,不能够写成:
${param.password1} = =${param.password2}
或者
${ ${param.password1 } = = ${param.password2 } }
而应写成
${ param.password1 = =param.password2 }


EL逻辑运算符

逻辑运算符

范例

结果

&&或and

交集${A && B}或${A and B}

true/false

||或or

并集${A || B}或${A or B}

true/false

!或not

非${! A }或${not A}

true/false

 

Empty 运算符

Empty 运算符主要用来判断值是否为空(NULL,空字符串,空集合)。

 

条件运算符

${ A ? B : C}

 

Jstl的添加

第一种方式:

在创建web项目的时候,自动添加jstl的标签

第二种方式:

以一种正常的方式创建web项目,然后在项目中手动的添加jstl标签项,如图:

点击项目名----右击------选中MyEclipse-------Add JSTL Libraries

这样就完成了jstl的添加。 

无论哪种方式的添加都必须包含两个jar包:jstl.jar和standard.jar。

Jstl在页面中的导入

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

Jstl标签Core标签库介绍

Core标签库,又被称为核心标签库,该标签库的工作是对于jsp页面一般处理的封装,在该标签库中的标签一共有14个,被分为了四类,分别是:

多用途核心标签:<c:out>  <c:set>  <c:remove>  <c:catch>

条件控制标签:<c:if> <c:choose> <c:when> <c:otherwise>

循环控制标签:<c:forEach> <c:forTokens>

url相关标签:<c:import>  <c:url> <c:redirect> <c:param>

以下是各个标签的用途和属性及其简单示例。

1.       用于显示的<c:out>标签

<c:out  value="${username }"  default="传值为空"  escapeXml="true"/>

该标签接收从前一个Action传递过来的username值,如果username的值为空,那么将默认显示default中的值,而当escapeXml设置为true时,将自动更换特殊字符。

 

2.       用于赋值的<c:set>标签

<c:set>标签用于为变量或是JavaBean中的变量属性赋值的工作,它的属性和描述如下所示:

<c:set  value="${username}"  property=""  scope="page"  target="userBean"  var="username"/>

Value中存放着即将被使用的值

Target中式被赋值的JavaBean实例的名称,若存在该target属性,则一定要存在property属性(可选)

Property中是JavaBean实例的变量属性名称(可选)

Var是被赋值的变量名(可选)

Scope变量的作用范围,若没有指定,默认为page(可选)

 

3.       用于删除的<c:remove>标签

<c:remove>标签用于删除存在于scope中的变量,它的属性和描述如下:

<c:remove  var=”sessionName”  scope=”session”>

var 是即将被删除的存在scope范围中的变量的名称

scope指示即将删除的变量存在的作用域范围

 

4.       用于捕获异常的<c:catch>标签

<c:catch>标签允许在jsp页面中捕捉异常。它包含了一个var属性,是一个描述异常的变量,该变量可选,若没有改变量的定义,那么仅仅是捕捉异常,而不做任何的处理,若定义了var属性,那么可以利用var所定义的异常变量进行判断转发到其他页面或提示报错信息。

<c:catch var=”errName”>

         ${param.name== 3}

</c:catch>

当${param.name == 3}表达式有异常时,可以从var属性”err”得到异常的内容,通过判断err内容是否为空来决定错误信息的提示。

 

5.       用于判断的<c:if>标签

<c:if>标签用于简单的条件语句

<c:if test=”${username == ‘zhangshan’}” var=”result”  scope=”session”>

若test中的值就是zhangshan的话,就显示<c:if></c:if>中的内容,判断的结果将存储在scope范围中的var变量中。默认情况下scope的值为page。

 

6.       用于复杂判断的<c:choose> ,<c:when>,<c:otherwise>标签

这三个标签用于实现复杂条件判断语句,类似”if,else if”的条件语句。

       <c:choose>

                <c:when test="${username== 'zhangshan'}">

                         显示张山的信息

                </c:when>

                <c:otherwise>

                         显示其他人的信息

                </c:otherwise>

       </c:choose>

<c:choose></c:choose>标签没有属性,我们可以将其看做是<c:when></c:when>和<c:otherwise></c:otherwise>的父标签,而这一对判断标签就是其中的子标签。

 

7.       用于循环的<c:forEach>标签

<c:forEach  items="${userList }"  var="user"  step="" varStatus=""  begin=""  end="">

         ${user}

</c:forEach>

接收传递过来的一个List集合,然后依次迭代将其中的值放在var变量中

Items中存放进行循环的集合(可选)

Var做循环的对象变量名,若存在items这个属性,则表示循环集合对象中的变量名

Begin表示开始条件

End表示结束条件

Step表示循环的步长,默认情况下为1

varStatus显示循环状态的变量(可选)

 

8.       用于分隔字符的<c:forTokens>标签

<c:forTokens>标签可以根据某个分隔符分隔指定的字符串,相当于java.util.StringTokenizer类。

<c:forTokens  items="123.456.789"  delims="."  varStatus=""  var="inteValue"  begin="0"  end="2"  step="1">

         ${intValue}

</c:forTokens>

Items表示进行分隔的EL表达式或是常量

Delims表示分隔符

Begin表示开始条件

End表示结束条件

Step表示循环的步长,默认情况下为1

Var表示做循环的对象变量名(可选)

varStatus显示循环状态的变量(可选)

将需要分隔的字符串“123.456.789”,依据分隔符“.”进行分隔,begin为0表示从第一个“.”开始分隔,end为2表示分隔到第三个“.”,并将做循环的变量名指定为intValue。由于步长为“2”,显示的EL表达式${intValue}只能显示为“123 789”。

 

9.       用于包含页面的<c:import>标签

<c:import>标签允许包含另一个JSP页面到本页面来

<c:import  url="/index.jsp"  charEncoding="utf-8"  context="/test"  scope=""  var="pageTest"  varReader=""/>

url需要导入页面的url

context该属性用于在不同的Context下 导入页面,当出现context属性时,必须以“/”开头,此时url属性页需要以“/”开头(可选)
charEncoding表示导入页的字符集

var可以定义导入文本的变量名(可选)

scope导入文本的变量名作用范围(可选)

varReader接受文本的java.io.Reader类变量名(可选)

 

10.   用于得到URL地址的<c:url>标签

该标签用于得到一个URL地址

<c:url value="/index.jsp"  context="" scope=""  var="urlValue"></c:url>

<a href=”${urlValue}”>超链接</a>

Value页面的URL地址

Context该属性用于得到不同的Context下的URL地址,当出现context属性时,必须以“/”开头,此时也需要url属性以“/”开头(可选)

charEncoding设置URL的字符集(可选)

scope变量名的作用范围(可选)

 

11.   用于页面重定向的<c:redirect>标签

<c:redirect>用于页面的重定向,该标签的作用相当于response.setRedirect方法名的工作,它包含url和context两个属性,属性含义和<c:url>标签相同

<c:redirect  url=”/index.jsp”>

出现该标签,则将重定向到当前web Context下的index.jsp页面,一般与<c:if>等标签一起使用。

 

12.   用于包含传递参数的<c:param>标签

<c:param>用来为包含或是重定向的页面传递参数

<c:param name=”username”  value=”zhangshan”>

Name传递的参数名

Value传递的参数值(可选)

例子: <c:redirect  url=”/index.jsp”>

          <c:param  name=”username”  value=”zhangshan ”/>

      </c:redirect> 

Jstl标签XML processing标签库介绍

XML核心标签:<x:parse>  <x:out> <x:set>

XML流控制标签:<x:if>  <x:choose>  <x:when>  <x:otherwise>  <x:forEach>

XML转换标签:<x:transform>  <x:param>

 

<?xml version=”1.0”  encoding=”utf-8”?>

<xml-body>

         <username>张三</username>

         <password>123456</password>

         <hobbies>

           <hobby>足球</hobby>

           <hobby>篮球</hobby>

         <hobby>看书</hobby>            

</hobbies>

</xml-body>

1.       用于解析XML文件的<x:parse>标签

<x:parse>标签是该组标签库的核心,从其标签名就可以知道,它是作为解析XML文件而存在的。

<c:import  var=”xmlUser”  url=”http://localhost:8088/eachstudy/xml/userInfo.xml”>

<x:parse  doc=”${xmlUser}”  var=”userValue” scope=””  varDom=”” scopeDom=””  systemId=””  filter=”’/>

Var,scope和varDom,scopeDom不应该同时出现的,而应该被视为两个版本来使用,两者的变量都可以被XML processing标签库的其他标签来使用。

Doc存放XML的内容

Var将解析后的XML保存在该属性所指定的变量中,之后XML processing标签库中的其他标签若取XML中的内容就可以从该变量中得到(可选)

Scope变量的作用范围

varDom指定保存的变量在org.w3c.dom.Document接口类型(可选)

scopeDom org.w3c.dom.Document的接口类型变量作用范围(可选)

systemId定义了一个URL,该URL将使用到XML文件中以接入其他资源文件(可选)

filter该属性必须为org.xml.sax.XMLFilter类的一个实例,可以通过使用EL表达式传入,将对XML文件作过滤得到自身需要的部分(可选)

该示例在借助<c:import>标签的作用下引入了userInfo.xml文件,将其内容保存在xmlUser变量中, <x:parse>根据xmlUser变量的值进行解析userInfo.xml。

 

2.       用于显示XML内容的<x:out>标签

<x:out>标签从<x:parse>标签解析后保存的变量中取得需要的XML文件内容,并显示在页面上。该标签是通过XPath技术(定位XML元素的一种技术)来实现的。要使用该标签必须将xalan-j的jar包保存在“WEB-INF/lib下”。

<c:import  var=”xmlUser”  url=”http://localhost:8088/eachstudy/xml/userInfo.xml”>

<x:parse  doc=”${xmlUser}”  var=”userValue”’/>

用户名为:<x:out  select=”$userValue/xml-body/username”><br>

密码为:<x:out  select=”$userValue/xml-body/password”>

读取XML文件并解析后的变量userValue将加上“$“作为XPath表达式的开头,select中的表达式将从xml-body根元素下的各个子元素中取得实体内容,最后将结果显示在页面上。

 

3.      用于保存XML内容的<x:set>标签

<x:set>标签允许将某个源XML中元素的实体内容或是属性,保存到一个变量中去,它的实现也依靠XPath技术。

<c:import  var=”xmlUser”  url=”http://localhost:8088/eachstudy/xml/userInfo.xml”>

<x:parse  doc=”${xmlUser}”  var=”userValue”’/>

<x:set  select=”$userValue/xml-body/username”  var=”tempValue”>

在这里将保存XML的name元素内容到变量“tempValue“中。

 

4.       用于判断的<x:if>标签

<x:if>标签允许由XPath的Boolean()函数得到的判断结果,来判断是否显示其标签所包含的内容。<x:if >标签的属性与<x:set>标签相同,但是var的结果只能是Boolean类型。

 

5.       用于复杂判断的<x:choose> <x:when> <x:otherwise>标签

这组标签将一起使用,来提供“ifelseif“语句的功能。

<x:choose>标签没有属性,可以被认为是父标签<x:when> <x:otherwise>将作为其子标签来使用。

<x:when>标签等价于“if“语句,它包含一个select属性,该属性为XPath判断表达式。

<x:otherwise>标签没有属性,它等价于“else“语句。

 

6.       用于对XML元素循环的<x:forEach>标签

<x:forEach>为对XML文件中同一名称元素的循环控制标签。

<x:forEach select=”$userValue/xml-body/hobbies/hobby” var=”hobby”  begin=”” end=””  step=””  varStatus=””>

           ${hobby }

</x:forEach>

Select是XPath表达式,结果是一个集合,将对该集合进行循环(可选)

Begin开始条件(可选)

End结束条件(可选)

Step循环的步长。默认为1(可选)

Var做循环的对象变量名,表示XPath表达式结果集合中的一个对象(可选)

varStatus显示循环状态的变量(可选)

该示例将使用循环读取XML中多个同存与hobbies元素下的hobby子元素

 

7.       格式化XML显示数据的<x:transform>标签

<x:transform>标签允许使用XSLT(转换XML格式的语言)为页面的显示数据所格式化的处理。

<c:import  var=”xmlUser”  url=”http://localhost:8088/eachstudy/xml/userInfo.xml”>

<c:set  var=”xsltdoc”>

           <?xml  version=”1.0”?>

           <xsl:stylesheet  xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”version=”1.0” >

                    <xsl:apply-template  match=”/”>

                             <xsl:apply-templates/>

                    </xsl:template>

                    <xsl:template  match=”xml-body”>

                             <html>

                                       <head></head>

                                       <body>

                                                <h2>用户名:<xsl:value-of  select=”username”/></h2>

                                                <h2>密码:<xsl:value-of  select=”password”></h2>

</body>

                                     </html>

                            </xsl:template>

                   </xsl:stylesheet>

         </c:set>

<x:transform  xslt=”${xsltdoc }”  doc=”${xmlUser}”/>

这个示例将XML文件保存的数据信心利用<c:import>保存在xmlUser中,然后使用一个<c:set>标签保存一个XSLT的源到“xsltdoc“,最后通过<x:transform>格式化XML文件的数据显示在页面上。

 

8.       用于参数传递的<x:param>标签

<x:param>标签用于在格式化XML时传递所需的参数。它的属性和描述同<c:param>

 

<c:foreach/>用法

 <c:forEach>语法: 

 <c:forEach var="name" items="expression" varStatus="name"  begin="expression" end="expression" step="expression"> 
 </c:forEach> 


var:迭代参数的名称。在迭代体中可以使用的变量的名称,用来表示每一个迭代变量。类型为String。 

 items:要进行迭代的集合。

 varStatus:迭代变量的名称,用来表示迭代的状态,可以访问到迭代自身的信息。 

begin:如果指定了items,那么迭代就从items[begin]开始进行迭代;如果没有指定items,那么就从begin开始迭代。它的类型为整数。 
end:如果指定了items,那么就在items[end]结束迭代;如果没有指定items,那么就在end结束迭代。它的类型也为整数。 
step:迭代的步长。 
<c:forEach>标签的items属性支持Java平台所提供的所有标准集合类型。
 不论是对整数还是对集合进行迭代,<c:forEach>的varStatus属性所起的作用相同。和var属性一样,varStatus用于创建限定了作用域的变量(改变量只在当前标签体内起作用)。不过,由varStatus属性命名的变量并不存储当前索引值或当前元素,而是赋予javax.servlet.jsp.jstl.core.LoopTagStatus类的实例。该类包含了一系列的特性,它们描述了迭代的当前状态,如下这些属性的含义如下所示: 
current:当前这次迭代的(集合中的)项。 
        index:当前这次迭代从0开始的迭代索引。 
        count:当前这次迭代从1开始的迭代计数。 
        first:用来表明当前这轮迭代是否为第一次迭代,该属性为boolean类型。 

        last:用来表明当前这轮迭代是否为最后一次迭代,该属性为boolean类型。 

        begin:begin属性的值。 

        end:end属性的值 

        step:step属性的值 


<c:forEach items="${problems}" var="problem" step="1" varStatus="status">   
    <c:choose>
    <c:when test="${status.index%2==0}">
     <TR ><TD>${problem.pid}</TD><TD>${problem.score}</TD> <TD>${status.index}</TD></TR>
    </c:when>
    <c:otherwise>
    <TR class="even"><TD></TD><TD>${problem.pid}</TD><TD>${problem.score}</TD>   <TD>${status.index}</TD></TR>
    </c:otherwise>
    </c:choose>

 </c:forEach>


格式化日期:
在EL表达式中要显示“yyyy-MM-dd”格式的日期:
使用<fmt:>格式化标签
    1 在页面上导入   <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    2 格式化日期<fmt:formatDate value=“${XXX}” pattern=“yyyy-MM-dd”/> 打印2012-08-21
           Value :EL表达式取的日期值;
           Pattern:输出的日期格式;

<1>日期
<fmt:formatDate value="${ user.lastConnectTime }"  type="both" />  2010-8-11 15:43:59
<fmt:formatDate value="${ user.lastConnectTime }"  type="date" dateStyle="default"/> 2010-8-11
<fmt:formatDate value="${ user.lastConnectTime }"  type="date" dateStyle="short"/> 10-8-11
<fmt:formatDate value="${isoDate}" type="date" dateStyle="medium"/> 2010-8-11
<fmt:formatDate value="${isoDate}" type="date" dateStyle="long"/> 2010年8月11日
<fmt:formatDate value="${isoDate}" type="date" dateStyle="full"/>  2010年8月11日 星期三
<2>时间 

<fmt:formatDate value="${isoDate}" type="time"/>  15:50:18
<fmt:formatDate value="${isoDate}" type="time" timeStyle="default"/> 16:03:12
<fmt:formatDate value="${isoDate}" type="time" timeStyle="short"/> 下午4:05
<fmt:formatDate value="${isoDate}" type="time" timeStyle="medium"/> 16:05:59
<fmt:formatDate value="${isoDate}" type="time" timeStyle="long"/> 下午04时06分21秒
<fmt:formatDate value="${isoDate}" type="time" timeStyle="full"/> 下午04时06分46秒 CST
<3>整合
<fmt:formatDate value="${date}" type="both" pattern="EEEE, MMMM d, yyyy HH:mm:ss "/> 星期三, 八月 11, 2010 16:08:04
<fmt:formatDate value="${isoDate}" type="both" pattern="d MMM yy, h:m:s a zzzz/> 11 八月 10, 4:9:14 下午 中国标准时间




  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值