- 浏览: 211662 次
- 性别:
- 来自: 上海
-
文章分类
最新评论
-
_大端:
文章以四个步骤解释对象和对象的引用,简单易懂,干货
对象引用与对象的区别 -
liuweihug:
这个博客不错。都是干货。Jquery+asp.net 后台数据 ...
jquery ajax 小例子 -
beyondfengyu:
总结得很好,考虑的情况很详细,灰常感谢
s:iterator 与 s:property -
wjxingzhe:
感谢总结!
s:iterator 与 s:property -
rxin2009:
文章很好,学习了,有一个问题呀请教lz:怎么去卸载一个监听器呢 ...
Listener小例子
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。即默认会将<、>、’、” 和 & 转换为 <、>、'、"和&。如果设为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表达式
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import="com.cos.User,java.util.*" %> <%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <body> <% Map<User,String[]> map = new HashMap<User,String[]>(); String temp[] = new String[2]; User user1 = new User(); user1.setName("zhangsan"); user1.setAge(20); temp[0] = "1"; temp[1] = "111111"; map.put(user1, temp); User user2 = new User(); user2.setName("lisi"); user2.setAge(22); temp = new String[2]; temp[0] = "2"; temp[1] = "2222222"; map.put(user2, temp); request.setAttribute("m",map); %> <c:forEach items="${m}" var="user"> <tr> <td>${user.key.name}</td> <td>${user.key.age}</td> <td>${user.value[0]}</td> <td>${user.value[1]}</td> </tr> <br> </c:forEach> </body> </html>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import="com.cos.User,java.util.*" %> <%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <body> <% request.setAttribute("m",null); request.setAttribute("mm","bbb"); %> <c:out value="${m}" default="nnnnnn"/><br> <c:out value="${mm}" default="nnnnnnlllllll"/><br> <c:set value="hello word." var="cset" scope="page"/> ${cset}<br> <c:if test="true" var="t"> is true </c:if> </body> </html>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import="com.cos.User,java.util.*" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <body> <fmt:formatNumber value="6789.3581" var="result" type="currency" maxFractionDigits="3" groupingUsed="true"/> 人民币6789.3581格式化的结果为(保留3位小数): <c:out value="${result}"/><br><br> <fmt:formatNumber value="3.1415926" var="result" maxFractionDigits="2" groupingUsed="false"/> 3.1415926保留两位小数格式化的结果为: <c:out value="${result}"/><br><br> <fmt:formatNumber value="0.653789" type="percent" var="result" maxFractionDigits="2" groupingUsed="false"/> 0.653789按百分比式化的结果为: <c:out value="${result}"/><br><br> </body> </html>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import="com.cos.User,java.util.*" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <body> <fmt:parseNumber value="¥6789.36" var="result" type="currency"/> "¥6789.36"转换为数字的结果为:<c:out value="${result}"/><br> <fmt:parseNumber value="3.1415926圆周率" var="result"/> "3.1415926圆周率"转换为数字的结果为:<c:out value="${result}"/><br> <fmt:parseNumber value="78.90%" type="percent" var="result"/> "78.90%"转换为数字的结果为:<c:out value="${result}"/><br> </body> </html>
- standard-1.0.4.jar (502.9 KB)
- 下载次数: 5
- jstl-1.2.jar (404.5 KB)
- 下载次数: 9
相关推荐
struts jstl el表达式示例代码 struts jstl el 表达式 源码
【JSTL EL表达式语言】是Java Server Pages (JSP)中的一种核心技术,用于在JSP页面中简化数据的访问和操作。它与Struts框架的结合使用,能够增强表现层的功能,提高代码的可读性和可维护性。 JSTL(JSP Standard ...
下面我们将详细介绍如何使用JSTL EL表达式遍历Map集合。 ### JSTL EL表达式概述 JSTL(JavaServer Pages Standard Tag Library)是一个JSP标签库,它简化了JSP页面的开发,使得JSP能够更专注于显示逻辑,而不是...
其中,EL(Expression Language)表达式是JSP 2.0引入的一种轻量级脚本语言,用于访问JavaBeans属性和执行基本操作。FN函数是JSTL提供的一个功能强大的工具,包含在`javax.servlet.jsp.jstl.fn`包下,提供了一系列...
**JSTL与EL的协同工作**:在JSP页面中,EL表达式通常与JSTL标签一起使用,EL负责数据的获取和计算,而JSTL标签则负责页面的逻辑控制。例如,使用EL表达式和`<c:if>`标签可以实现简单的条件判断: ```jsp ${user != ...
总的来说,JSTL和EL表达式是JSP开发中不可或缺的部分,它们提供了更加优雅的代码组织方式,降低了维护成本,并提高了开发效率。通过理解并熟练运用这两个工具,开发者能够更好地构建健壮且易于维护的Web应用程序。
本资源主要讲解了如何在JSTL中定义和使用自定义的EL表达式,这对于提高JSP页面的可读性和可维护性至关重要。 首先,理解JSTL的基础概念。JSTL由几个核心标签库组成,如fmt、fn、sql、xml等,它们提供了处理日期和...
JAVAEE 实验报告 EL 表达式和 JSTL 标签库的使用 EL 表达式(Expression Language)是一种在 JSP 页面中使用的脚本语言,用于简化 JSP 页面的开发。EL 表达式可以访问 JSP 页面中的变量、对象和集合,进行逻辑操作...
### EL表达式语言详解 #### 9.1 概述 在JSP页面开发中,为了提高代码的可读性和可维护性,开发者们逐渐转向使用标签库来替代传统的Java片段语言来实现页面的显示逻辑。然而,自定义标签虽然灵活,但也容易导致重复...
EL表达式经常与JSTL一起使用,尤其是在JSTL的`c`(Core)标签库中。例如,`<c:if>`和`<c:forEach>`标签可以配合EL表达式进行条件判断和循环操作。通过这种方式,开发者可以将业务逻辑和视图层分离,提高代码的可读性...
EL表达式通常以`${}`包裹,它能够直接访问作用域中的对象,如request、session、application等。EL的优势在于其简洁性,可以快速地访问和操作数据,而无需编写大量的Java脚本。 **相关jar包**: - **standard.jar**...
在JSTL中,EL表达式经常与标签库结合使用,提供更强大的功能。例如,`<c:out>`和`<c:set>`标签都可以接受EL表达式作为参数。 总之,JSTL通过提供一套标准的标签库,大大简化了JSP页面的编写,使得页面逻辑更加清晰...
JSTL(JSP Standard Tag Library ,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,E L(Expression Language) 目的:为了使JSP写起来更加简单。
### EL表达式详解 #### 一、EL表达式的概述与基本使用 EL(Expression Language),即表达式语言,是JavaServer Pages (JSP) 2.0标准的一部分,用于简化JSP页面中对数据访问的操作。它允许开发者通过简单的语法在...
**JSP的JSTL标签和EL表达式详解** JSP(JavaServer Pages)是一种动态网页技术,它允许开发者在HTML或XML文档中嵌入Java代码来生成动态内容。然而,传统的JSP脚本语法可能导致代码混乱且不易维护。为了解决这个问题...
【JSTL与EL表达式详解】 JSTL(JSP Standard Tag Library)是Java服务器端的一个重要组件,主要用于简化JSP页面的编程,提供了一系列的标签库来处理常见的任务,比如数据处理、URL操作、国际化等。它由Apache ...
在JSP页面中,使用`<c:forEach>`标签迭代用户列表,通过EL表达式 `${user.name}` 和 `${user.age}` 输出用户的名字和年龄。 **总结** JSTL和EL是Java Web开发中不可或缺的工具,它们提高了代码的可读性和可维护性。...
EL表达式可以与JavaServer Pages Standard Tag Library (JSTL) 结合使用,增强其功能。例如,`${expression}">` 用于安全地输出EL表达式的结果,防止跨站脚本攻击(XSS)。 **EL表达式的高级特性** 1. **隐式对象**...
在项目开发中,如果遇到JSP页面无法识别或执行EL表达式,很可能是缺少了必要的依赖库,特别是`el-api.jar`和`jstl.jar`这两个核心jar包。 首先,`el-api.jar`包含了EL表达式的API定义,定义了EL表达式的语法和行为...
当EL表达式被错误地当作字符串处理而不是被解析时,会导致其原本要展示的数据无法正确显示。这个问题在使用Java EE 5及以上版本时比较常见。 要解决这个问题,首先需要理解EL表达式的解析与web.xml配置文件中指定的...