jsp中的JSTL与EL表达式用法

JSTL (JSP Standard Tag Library ,JSP标准标签库)

JSTL标签库分为5类:JSTL核心标签库、JSTL函数标签库、数据库标签库、I18N格式化标签库、XML标签库。

JSTL的核心标签库主要包括:表达式操作、流程控制、迭代操作和URL操作。以下是JSTL常用标签的用法总结:

一、表达式操作

1、<c:out>

作用:用于显示数据的内容。
语法1:没有本体内容
 <c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />
语法2:有本体内容
 <c:out value="value" [escapeXml="{true|false}"]>
  default value
 </c:out>
属性说明:
 value:需要显示出来的值。
 default:如果value的值为null时,则显示default指定的值。
 escapeXml:是否转换特殊字符,默认为true。即默认会将<、>、’、” 和 & 转换为 &lt;、&gt;、'、&#034和&amp。如果设为false,则不进行转换。

2、<c:set>
作用:用于将变量的值存储在JSP范围中或JavaBean的属性中。
语法1:将value的值存储在范围为scope的varName变量中
 <c:set value="value" var="varName" [scope="{page|request|session|application}"] />
语法2:将本体内容的数据存储在范围为scope的varName变量中
 <c:set var="varName"  [scope="{page|request|session|application}"] >
 ...本体内容
 </c:set>
语法3:将value的值存储在target对象的property属性中
 <c:set value="value" target="target" property="propertyName" />
语法4:将本体内容的数据存储在target对象的property属性中
 <c:set target="target" property="propertyName">
 ...本体内容
 </c:set>
属性说明:
 value:要被存储的值。
 var:欲存入的变量名称。
 scope:var变量的JSP范围。默认为page范围。
 target:为一JavaBean或Map对象。

如果“target”是一个Map,“property”指定的是该Map的一个键;如果“target”是一个bean,“property”指定的  是该bean的一个成员字段。
 如果“target”表达式为null,容器会抛出一个异常。
 如果“target”表达式不是一个Map或bean,容器会抛出一个异常。
 如果“target”表达式是一个bean,但是这个bean没有与“property”匹配的成员字段,容器会抛出一个异常。
 property:指定的target对象的属性。

3、<c:remove>
作用:移除变量。
语法:<c:remove var="varName" [scope="{page|request|session|application}"] />
属性说明:
 var:要移除的变量。
 scope:var变量所在的JSP范围,默认为page范围。

4、<c:catch>
作用:用于处理产生错误的异常情况,并将错误信息存储起来。
语法: <c:catch [var="varName"] >
 ...欲抓取错误的部分
 </c:catch>
属性说明:
 var:将错误信息存储在指定的变量中,可以通过该变量获取错误信息。

二、流程控制

1、<c:if>
作用:类似if判断语句,用于表达式判断。
语法1:没有本体内容
 <c:if test="testCondition" var="varName" [scope="{page|request|session|application}"] />
语法2:有本体内容
 <c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"] />
 ...本体内容
 </c:if>
属性说明:
 test:当该属性中的表达式运算结果为true,则会执行本体内容,为false则不执行,该标签必须要有test属性。
 var:存储test的运算结果,为true或false。
 scope:var变量的JSP范围。

2、<c:choose>、<c:when>、<c:otherwise>
作用:这三个标签必须组合使用,用于流程控制。
范例:
<c:choose> 
<c:when test="${condition1}"> 
condition1为true 
</c:when> 
<c:when test="${ condition2}"> 
condition2为true 
</c:when> 
<c:otherwise> 
condition1和condition2都为false 
</c:otherwise>
</c:choose>  
范例说明:当condition1为true时,会显示“condition1为true”;当condition1为false且condition2为true时,会显示“condition2为true”,如果两者都为false,则会显示“condition1和condition2都为false”。
注意:若condition1和condition2的运算结果都为true时,此时只会显示"condition1为true"。
限制说明:
 a、<c:when>和<c:otherwise>标签必须在<c:choose>和</c:choose>之间使用。
 b、在同一个<c:choose>中,<c:otherwise>必须是最后一个标签,且只能有一个<c:otherwise>标签。<c:when>可以有多个。
 c、在同一个<c:choose>中,当所有<c:when>的test都为false时,才执行<c:otherwise>的本体内容。

三、迭代操作

1、<c:forEach>
作用:为循环控制,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当条件符合时,就会持续重复执行<c:forEach>的本体内容。
语法1:迭代一个集合对象中的所有成员
 <c:forEach items="collection" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"] />
 ...本体内容
 </c:forEach>
语法2:迭代指定次数
 <c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end" [step="step"]> 
 ...本体内容
 </c:forEach> 
属性说明:
 items:被迭代的集合对象。
 var:存放当前指到的集合对象中的成员。
 varStatus:存放当前指到的成员的相关信息。(index:当前指到的成员的索引;count:当前总共指到成员的总数;first:当前指到的成员     是否为第一个成员;last:当前指到的成员是否为最后一个成员)。
 begin:迭代开始的位置,默认为0。
 end:迭代结束的位置,默认为最后。
 step:每次迭代的间隔数,默认为1。
范例:
<% 
int atts[] = {1,2,3,4,5,6,7,8,9,10}; 
request.setAttribute("atts", atts); 
%> 
<c:forEach items="${atts}" var="item" begin="0" end="9" step="1" > 
${item}</br> 
</c:forEach>  
此标签也可以用于普通的循环控制,与for循环一样。如:
<c:forEach begin="1" end="10" var="item" > 
${item}</br> 
</c:forEach>

2、<c:forTokens>
作用:用指定分隔符分隔一字符串,并迭代分隔后的数组。
语法: <c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"] >
  本体内容
 </c:forTokens>
属性说明:
 items:被分隔并迭代的字符串。
 delims:用来分隔字符串的字符。
 var:存放当前指到的成员。
 varStatus:存放当前指到的成员的相关信息。(index:当前指到的成员的索引;count:当前总共指到成员的总数;first:当前指到的成员     是否为第一个成员;last:当前指到的成员是否为最后一个成员)。
 begin:迭代开始的位置,默认为0。
 end:迭代结束的位置,默认为最后。
 step:每次迭代的间隔数,默认为1。
范例1:
<c:forTokens items="A,B,C,D,E" delims="," var="item" > 
${item} 
</c:forTokens>  
用“,”号分隔字符串,并迭代输出分隔后的字符串数组,输出结果为“ABCDE”。
范例2:
<c:forTokens items="A,B;C-D,E" delims=",;-" var="item" > 
${item}
</c:forTokens>   
delims中指定了三个分隔符“,”、“;”和“-”,可见我们一次可以设定所有想当做分隔字符串用的字符。输出结果依然为“ABCDE”。

四、URL操作

1、<c:import>
作用:将其他静态或动态文件包含到本身JSP网页中。不但可以包含同一个web application下的文件,还可以包含其他web application或其他网站的文件。
语法: 
 <c:import url="url" [var="varName"] [scope="{page|request|session|application}"] >
  [<c:param name="paramName" value="paramValue"/>]
 </c:import>
属性说明:
 url:要包含至本身JSP网页的其他文件的URL。必选
 var:将包含进来的其他文件以字符串的形式存放到指定的变量中。可选
 scope:var变量的作用范围。可选
 <c:param>:可选子标签,用于向包含进来的其他网页文件传递参数。
范例:
<c:import url="http://java.sun.com" > 
<c:param name="test" value="1234" />                          
</c:import>  
说明:当<c:import>标签中未指定var变量时,会直接将包含进来的其他网页文件内容显示出来,如果指定了var变量,则会将内容存放到var变量中,不显示。

2、<c:url>
作用:生成一个URL。
语法: 
 <c:url value="url" [context="expression"] [var="name"] [scope="scope"]>
  [<c:param name="expression" value="expression"/>]
 </c:url>
范例1:
<a href="<c:url value=index.jsp‘/>">index page</a>
在<a>超链接标签中生成一个URL,指向index.jsp。
范例2:
<c:url value="index.jsp"> 
  <c:param name="keyword" value="${searchTerm}"/> 
  <c:param name="month" value="02/2003"/> 
</c:url>
生成一个URL,并传递参数,生成的结果为index.jsp?keyword=*&month=02/2003,*代表传递的searchTerm的值。

3、<c:redirect>
作用:可以将客户端的请求从一个JSP网页导向到其他文件。
语法: 
 <c:redirect url="url">
  [<param name="paramName" value="paramValue">]
 </c:redirect>
将请求导向URl指向的其他文件。

五、I18N格式化标签库

使用I18N格式化标签之前,需先插入以下指令:

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

1、<fmt:formatNumber>

作用:将数字格式化成数字、货币、百分比

语法:

<fmt:formatNumber value="value" [var="varName"] [type="{number|curreny|percent}"] [maxFractionDigits="3"] [groupingUsed="{true|false}"]/>

属性说明:
value:需要进行格式化的值

var:值的另一个变量声明

maxFractionDigits:保留的小数点个数

2、<fmt:parseNumber>

作用:将字符串型的数字、货币、百分比格式化成数字

语法:

<fmt:parseNumber value="¥6789.36" [var="result"] [type="{number|curreny|percent}"] >

属性说明:
value:需要进行格式化的值

var:值的另一个变量声明

3、<fmt:formatDate>

作用:格式化时间和日期

4、<fmt:parseDate>
作用:将字符串形式的时间和日期转换成日期时间类型。

5、<fmt:setTimeZone>

作用:在JSP 网页中设置默认时区。

6、<fmt:timeZone>

作用:在JSP网页中为该标签体内的代码段设置时区。

7、<fmt:setLocale>

作用:在JSP 网页中设置语言地区。

8、<fmt:requestEncoding>

作用:在JSP 网页中设置请求所采用的编码方式,等价于JSP中的request. setCharacterEncoding(String encoding)。

9、<fmt:setBundle>

作用:设置默认的消息资源。

10、<fmt:message>

作用:在指定的消息资源中按关键字取出相应的消息内容。

11、<fmt:param>

作用:在从消息资源中取出消息内容时,为消息内容设置动态参数。

12、<fmt:bundle>

作用:为该标签体内的代码段设置一个消息资源。

二、常见错误

应用部署运行的时候出现JSP异常, 发生在使用JSTL库的时候: According to TLD or attribute directive in tag file, attribute value does not accept any expressions, 可能是因为使用了JSP2.0版本, 同时又没有使用JSTL core库的备用版本(RT库), 以下有两种处理方法:

1. 如果不想使用web-app_2_4.xsd 和jstl1.1 那么可以按照下面两种方式修改

1). 修改web.xml.

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
改为2.3版本的

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>

2). 使用JSTL core RT库

JSTL core库的有两种taglib伪指令, 其中RT库即是依赖于JSP传统的请求时属性值, 而不是依赖于EL来实现(称为EL库.JSP2.0将支持EL)

JSP中使用<%@ taglib uri=http://java.sun.com/jstl/core prefix="c"%>在2.3版本都可以,在2.4就不行了, 这是版本不兼容引起的,稍后将介绍servlet的版本。

只要将

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

2:如果要使用jstl1.1(推荐) 则按照一下修改,很简单的。

jstl存在1.0和1.1的差异问题,用EL建议需要在1.1的版本下,

使用jstl1.1 只需要将

1.0的为

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

换成:

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

三、EL表达式

 

  1. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
  2. <%@ page import="com.cos.User,java.util.*" %>
  3. <%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <body>
  7. <%
  8. Map<User,String[]> map = new HashMap<User,String[]>();
  9. String temp[] = new String[2];
  10. User user1 = new User();
  11. user1.setName("zhangsan");
  12. user1.setAge(20);
  13. temp[0] = "1";
  14. temp[1] = "111111";
  15. map.put(user1, temp);
  16. User user2 = new User();
  17. user2.setName("lisi");
  18. user2.setAge(22);
  19. temp = new String[2];
  20. temp[0] = "2";
  21. temp[1] = "2222222";
  22. map.put(user2, temp);
  23. request.setAttribute("m",map);
  24. %>
  25. <c:forEach items="${m}" var="user">
  26. <tr>
  27. <td>${user.key.name}</td>
  28. <td>${user.key.age}</td>
  29. <td>${user.value[0]}</td>
  30. <td>${user.value[1]}</td>
  31. </tr>
  32. <br>
  33. </c:forEach>
  34. </body>
  35. </html>

 

  1. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
  2. <%@ page import="com.cos.User,java.util.*" %>
  3. <%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <body>
  7. <%
  8. request.setAttribute("m",null);
  9. request.setAttribute("mm","bbb");
  10. %>
  11. <c:out value="${m}" default="nnnnnn"/><br>
  12. <c:out value="${mm}" default="nnnnnnlllllll"/><br>
  13. <c:set value="hello word." var="cset" scope="page"/>
  14. ${cset}<br>
  15. <c:if test="true" var="t">
  16. is true
  17. </c:if>
  18. </body>
  19. </html>

 

  1. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
  2. <%@ page import="com.cos.User,java.util.*" %>
  3. <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
  4. <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  6. <html>
  7. <body>
  8. <fmt:formatNumber value="6789.3581" var="result" type="currency" maxFractionDigits="3" groupingUsed="true"/>
  9. 人民币6789.3581格式化的结果为(保留3位小数):
  10. <c:out value="${result}"/><br><br>
  11. <fmt:formatNumber value="3.1415926" var="result" maxFractionDigits="2" groupingUsed="false"/>
  12. 3.1415926保留两位小数格式化的结果为:
  13. <c:out value="${result}"/><br><br>
  14. <fmt:formatNumber value="0.653789" type="percent" var="result" maxFractionDigits="2" groupingUsed="false"/>
  15. 0.653789按百分比式化的结果为:
  16. <c:out value="${result}"/><br><br>
  17. </body>
  18. </html>
    1.  <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
    2. <%@ page import="com.cos.User,java.util.*" %>
    3. <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
    4. <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    6. <html>
    7. <body>
    8. <fmt:parseNumber value="¥6789.36" var="result" type="currency"/>
    9. "¥6789.36"转换为数字的结果为:<c:out value="${result}"/><br>
    10. <fmt:parseNumber value="3.1415926圆周率" var="result"/>
    11. "3.1415926圆周率"转换为数字的结果为:<c:out value="${result}"/><br>
    12. <fmt:parseNumber value="78.90%" type="percent" var="result"/>
    13. "78.90%"转换为数字的结果为:<c:out value="${result}"/><br>
    14. </body>
    15. </html>
时间: 2024-10-16 06:22:17

jsp中的JSTL与EL表达式用法的相关文章

【转】JSP中的JSTL与EL表达式用法及区别

对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念JSTL一般要配合EL表达式一起使用,来实现在jsp中不出现java代码段.所以我们先来学习EL表达式 EL主要用于查找作用域中的数据,然后对它们执行简单操作:它不是编程语言,甚至不是脚本编制语言.通常与 JSTL 标记一起作用,能用简单而又方便的符号来表示复杂的行为. EL基本格式 EL表达式的格式:用美元符号($)定

JSP 中EL表达式用法

JSP 中EL表达式用法详解 EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${为起始.以}为结尾的.上述EL范例的意思是:从Session的范围中,取得 用户的性别.假若依照之前JSP Scriptlet的写法如下: User user =(User)session.getAttribute("user"); String sex =u

jstl,el表达式

在上一篇中,我们写了将数据传到jsp页面,在jsp页面进行展示数组,但是我们发现,在jsp页面写代码是一件很烦的事,一个循环要拆成两部分,例如for循环,在例如if语句: <%int a=22;%> <%if(a>20){%> hello world <%}else{%> world hello <%}%> 这是很烦很痛苦的的 一件事,那么怎么解决这个问题呢,这里用到了jstl技术: 再写jstl技术之前,我们先简单了解一下el表达式,el表达式要和j

Java之旅(三)--- JSTL和EL表达式

 先给大家看一段JSP的代码,看看有什么感受? <% List<UsEL> usELList = pageModel.getList(); for (ItELator<UsEL> itEL=usELList.itELator(); itEL.hasNext();) { UsEL usEL = itEL.next(); %> <tr> <td class="rd8"> <input type="checkbo

Struts中的OGNL和EL表达式笔记

Struts中的OGNL和EL表达式笔记 OGNL(Object-Graph Navigation Language),可以方便的操作对象属性的表达式语言. 1.#符号的用途 一般有三种方式: 1.1.访问非根对象属性,如类似于#session.msg表达式,由于Struts2的值栈被当做根对象, 所以访问其他非根对象时,需要加#符号. #符号相当于ActionContext.getContext( ): #session.msg表达式相当于ActionContext.getContext().

JSP中获取jstl中的数据

我们在编程JSP时,有时会需要访问jstl中的数据,或者说是el表达式中的数据. 比如, <c:forEach    varStatus="data1" var="data" items="${alltemphotmeltdata}"> <tr> <td> ${data.hNo } </td> <td> ${data.hDate } </td> <td> ${da

jsp内置对象和el表达式内置对象误区

未经允许禁止转载... jsp九大内置对象 EL表达式隐含的11个对象 隐含对象名称 描       述 pageContext 对应于JSP页面中的pageContext对象(注意:取的是pageContext对象.) pageScope 代表page域中用于保存属性的Map对象 requestScope 代表request域中用于保存属性的Map对象 sessionScope 代表session域中用于保存属性的Map对象 applicationScope 代表application域中用于

Jsp内置对象及EL表达式的使用

一.JSP的内置对象(9个JSP内置对象) JSP的内置对象引用名称 对应的类型 request HttpServletRequest response  HttpServletResponse session HttpSession(有开关的:page指令的session属性的取值) application  ServletContext config  ServletConfig page this(当前Servlet对象) exception java.lang.Throwable(有开关

JSP 中EL表达式用法详解

EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${为起始.以}为结尾的.上述EL范例的意思是:从Session的范围中,取得 用户的性别.假若依照之前JSP Scriptlet的写法如下: User user =(User)session.getAttribute("user"); String sex =user.getSex( );