Jstl - forEach循环
2007-12-27 11:14:17| 分类: 技术文章 | 标签: |字号大中小 订阅
简单点说,<c:forEach>标签的作用就是迭代输出标签内部的内容。它既可以进行固定次数的迭代输出,也可以依据集合中对象的个数来决定迭代的次数。
<c:forEach>标签的语法定义如下所示。
<c:forEach var="name" items="expression" varStatus="name"
begin="expression" end="expression" step="expression">
body content
</c:forEach>
<c:forEach>标签具有以下一些属性:
l var:迭代参数的名称。在迭代体中可以使用的变量的名称,用来表示每一个迭代变量。类型为String。
l items:要进行迭代的集合。对于它所支持的类型将在下面进行讲解。
l varStatus:迭代变量的名称,用来表示迭代的状态,可以访问到迭代自身的信息。
l begin:如果指定了items,那么迭代就从items[begin]开始进行迭代;如果没有指定items,那么就从begin开始迭代。它的类型为整数。
l end:如果指定了items,那么就在items[end]结束迭代;如果没有指定items,那么就在end结束迭代。它的类型也为整数。
l step:迭代的步长。
<c:forEach>标签的items属性支持Java平台所提供的所有标准集合类型。此外,您可以使用该操作来迭代数组(包括基本类型数组)中的元素。它所支持的集合类型以及迭代的元素如下所示:
l java.util.Collection:调用iterator()来获得的元素。
l java.util.Map:通过java.util.Map.Entry所获得的实例。
l java.util.Iterator:迭代器元素。
l java.util.Enumeration:枚举元素。
l Object实例数组:数组元素。
l 基本类型值数组:经过包装的数组元素。
l 用逗号定界的String:分割后的子字符串。
l javax.servlet.jsp.jstl.sql.Result:SQL查询所获得的行。
不论是对整数还是对集合进行迭代,<c:forEach>的varStatus属性所起的作用相同。和var属性一样,varStatus 用于创建限定了作用域的变量(改变量只在当前标签体内起作用)。不过,由varStatus属性命名的变量并不存储当前索引值或当前元素,而是赋予 javax.servlet.jsp.jstl.core.LoopTagStatus类的实例。该类包含了一系列的特性,它们描述了迭代的当前状态,如 下这些属性的含义如下所示:
l current:当前这次迭代的(集合中的)项。
l index:当前这次迭代从0开始的迭代索引。
l count:当前这次迭代从1开始的迭代计数。
l first:用来表明当前这轮迭代是否为第一次迭代,该属性为boolean类型。
l last:用来表明当前这轮迭代是否为最后一次迭代,该属性为boolean类型。
l begin:begin属性的值。
l end:end属性的值
l step:step属性的值
用于复杂判断的<c:choose>、<c:when>、<c:otherwise>标签
这三个标签用于实现复杂条件判断语句,类似“if,elseif”的条件语句。
q <c:choose>标签没有属性,可以被认为是父标签,<c:when>、<c:otherwise>将作为其子标签来使用。
q <c:when>标签等价于“if”语句,它包含一个test属性,该属性表示需要判断的条件。
q <c:otherwise>标签没有属性,它等价于“else”语句。
下面看一个复杂条件语句的示例。
<c:choose>
<c:when test="${paramValues.sampleValue[2] == 11}">
not 12 not 13,it is 11
</c:when>
<c:when test="${paramValues.sampleValue[2] == 12}">
not 11 not 13,it is 12
</c:when>
<c:when test="${paramValues.sampleValue[2] == 13}">
not 11 not 12,it is 13
</c:when>
<c:otherwise>
not 11 、12、13
</c:otherwise>
</c:choose>
该示例将判断request请求提交的传入控件数组参数中,下标为“2”控件内容是否为“11”或“12”或“13”,并根据判断结果显示各自的语句,若都不是则显示“not 11 、12、13”。
<%@ page contentType=”text/html; charset=GBK” %>
<%@ page import=”java.util.*” %>
<%@ taglib uri=”http://java.sun.com/jstl/core” prefix=”c” %>
<html>
<head>
<title>JSTL测试1–c:forEach循环</title>
</head>
<body>
一、整数
<c:forEach var=”i” begin=”1″ end=”10″ step=”1″>
<c:out value=”${i}” />,
</c:forEach><p>
二、计算x的平方
<table>
<tr><th>Value</th>
<th>Square</th></tr>
<c:forEach var=”x” begin=”0″ end=”10″ step=”2″>
<tr><td><c:out value=”${x}”/></td>
<td><c:out value=”${x * x}”/></td></tr>
</c:forEach>
</table> <p>
三、字符串”47,52,53,55,46,22,16,2″ 分隔.
<table border=”1″>
<c:forTokens items=”47,52,53,55,46,22,16,2″ delims=”,” var=”dailyPrice”>
<tr><td><c:out value=”${dailyPrice}”/></td></tr>
</c:forTokens>
</table><p>
四、使用步长
<table>
<tr><th>second</th>
<th>second</th></tr>
<c:forEach var=”seconds” begin=”0″ end=”${pageContext.session.maxInactiveInterval}” step=”60″>
<tr><td><c:out value=”${seconds}”/></td>
<td><c:out value=”${seconds}”/></td></tr>
</c:forEach>
</table> <p>
五、对数组进行循环<p>
<% int ai[] = {10, 20, 30, 40, 50};
pageContext.setAttribute(”ary”, ai);
%>
<c:forEach var=”i” items=”${ary}”>
<c:out value=”${i}”/>*
</c:forEach><p>
<%
Cookie c=new Cookie(”cookie1″,”one”);
response.addCookie(c);
%>
<%
Cookie cookies[]=request.getCookies();
Cookie sCookie=null;
String sname=null;
String name=null;
if(cookies==null) // 如果没有任何cookie
out.print(”none any cookie”);
else
{
//out.print(cookies.length + “<br>”);
for(int i=0;i<cookies.length; i++) // 循环列出所有可用的Cookie
{
sCookie=cookies[i];
sname=sCookie.getName();
name = sCookie.getValue();
out.println(sname + “->” + name + “<br>”);
}
}
%>
<table border=”1″ align=”center”>
<tr><th>Cookie Name</th>
<th>Cookie Value</th></tr>
<c:forEach var=”cook” items=”${pageContext.request.cookies}”>
<tr><td><c:out value=”${cook.name}”/></td>
<td><c:out value=”${cook.value}”/></td></tr>
</c:forEach>
</table> <p>
六、字符串数组循环
<% String as[] = {
“A first string”, “La deuxieme string”, “Ella troisiemo stringo”
};
request.setAttribute(”stringArray”, as);
%><p>
<c:forEach var=”string” items=”${stringArray}”>
<c:out value=”${string}”/><br>
</c:forEach>
七、枚举
<%
Hashtable hashtable1 = new Hashtable();
pageContext.setAttribute(”numberMap”, hashtable1);
hashtable1.put(new Integer(1), “uno”);
hashtable1.put(new Integer(2), “dos”);
hashtable1.put(new Integer(3), “tres”);
hashtable1.put(new Integer(4), “cuatro”);
hashtable1.put(new Integer(5), “cinco”);
hashtable1.put(new Integer(6), “seis”);
hashtable1.put(new Integer(7), “siete”);
hashtable1.put(new Integer(8), “ocho”);
hashtable1.put(new Integer(9), “nueve”);
hashtable1.put(new Integer(10), “diez”);
java.util.Enumeration enumeration = hashtable1.keys();
pageContext.setAttribute(”enumeration”, enumeration);
%>
<c:forEach var=”item” items=”${enumeration}” begin=”2″ end=”10″ step=”2″>
<c:out value=”${item}”/><br>
</c:forEach><p>
八、map<p>
<c:forEach var=”prop” items=”${numberMap}” begin=”1″ end=”5″>
<c:out value=”${prop.key}”/> = <c:out value=”${prop.value}”/><br>
</c:forEach>
</body>
</html>
9:Vector变量
<c:forEach var="vect" items="${vect}" >
<c:out value="${vect.exposalid}"/>
<c:out value="${vect.exposalname}"/>
</c:forEach>
<c:forEach var="i" begin="0" end="6">
分享到:
相关推荐
- `<c:forLoop>` 和 `<c:forEach>`:循环操作。 - `<c:url>` 和 `<c:param>`:创建URL并添加参数。 - `<c:remove>`:移除一个变量。 - `<c:redirect>` 和 `<c:forward>`:页面重定向和转发。 **JSTL的SQL库(sql)*...
例如,使用`<c:forEach>`标签遍历集合,而不是在JSP中嵌入Java代码进行循环,使得代码更加简洁易懂。 总之,"jakarta.servlet.jsp.jstl-api-2.0.0.jar"是Java Web开发中的一个重要组件,它提供了JSTL标准标签库的...
- **Core标签库**:提供了基本的控制结构,如`<c:if>`、`<c:choose>`、`<c:forEach>`等,用于条件判断和循环。 - **Format/International化标签库** (`fmt`库):支持日期、时间、数字的格式化,以及多语言国际化...
例如,你可以用EL来获取Bean的属性值,然后用JSTL标签进行条件判断或循环遍历。 **使用JSTL的注意事项** 1. **引入依赖**:在Web应用的`WEB-INF/lib`目录下添加`jstl-api-1.2.jar`和对应的实现库(如`jstl-1.2.jar...
在Java Web开发中,JSTL(JavaServer...例如,使用`<c:if>`标签进行条件判断,`<c:forEach>`进行循环,`<fmt:formatDate>`进行日期格式化等。为了使用这些功能,需要在JSP页面顶部引入JSTL库的标签库定义,如: ```jsp ...
JSTL的核心标签库(core)提供了常见的控制结构,如`<c:if>`和`<c:forEach>`,用于条件判断和循环。JDBC标签库(jdbc)支持数据库操作,如查询和事务管理。XML处理标签库(fmt)则用于XML文档的解析和操作。最后,...
1. **Core(核心)库**:提供控制流程(如条件、循环)、URL操作和国际化等功能。 2. **XML库**(xml taglib):处理XML文档,如XPath查询和XML转换。 3. **Fmt(格式化)库**:提供日期、数字、货币等的格式化功能...
**JSTL(JavaServer Pages Standard ...例如,可以使用`<c:forEach>`进行循环,`<c:if>`进行条件判断,`<fmt:formatDate>`格式化日期等。 ```jsp <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> ...
例如,`<c:if>`和`<c:choose>`用于条件判断,`<c:forEach>`用于循环遍历,`<c:set>`和`<c:remove>`用于变量的设置和移除。 2. **函数标签库(Function Tags)**:这些标签提供了一组静态方法,可以作为JSP页面上的...
这些库提供了处理循环、条件判断、国际化、XML操作等多种功能,使得JSP代码更加简洁,可读性更强。 2. jstl-1.2.jar的核心功能 - Core库:包含基本的流程控制标签,如`<c:forEach>`用于迭代,`<c:if>`和`...
例如,你可以用`<c:forEach>`进行循环,`<c:if>`进行条件判断等。 3. **JSTL-1.1.2-sources.jar** 这个文件提供了JSTL 1.1.2版本的源代码,开发者可以查看和学习内部实现,有助于理解和调试问题,或者自定义扩展。...
1. **Core**:核心标签库,提供了基本的控制结构,如条件语句(if/else)、循环(foreach)以及重定向和转发等。 2. **Format**:格式化标签库,用于日期、时间、数字的格式化,以及国际化的支持。 3. **Function*...
1. **core** - 提供了基本的控制结构,如循环、条件语句、重定向和转发等。 2. **fmt** - 用于国际化和格式化,如日期、货币和数字的格式化。 3. **fn** - 内置函数库,提供了一些实用的字符串和集合操作函数。 4. *...
但是过度依赖JSTL可能会增加内存消耗,应避免在循环中创建大量标签实例。 - **与EL的配合**:JSTL与EL(Expression Language)通常结合使用,EL用于在JSP页面中表达和计算值,而JSTL提供控制流程和数据操作。 ...
例如,使用JSTL的`<c:if>`和`<c:forEach>`标签,可以在Struts的视图层进行条件判断和循环操作,使得逻辑处理更加清晰。 **"jstl-1_1-mr2-spec.pdf"** 这个文档很可能是JSTL 1.1 MR2版本的官方规范或用户指南,详细...
例如,你可以使用 `<c:forEach>` 进行循环遍历,`<c:if>` 进行条件判断,`<fmt:formatDate>` 对日期进行格式化等。 `jstl-api-1.2.1.jar`则是JSTL的API接口库,它定义了JSTL的接口和抽象类,是与JSTL交互时的规范。...
- **Core**: 提供基本的流程控制标签,如条件语句、循环等。 - **JDBC**: 支持数据库操作,包括查询、更新、事务管理等。 - **fmt**: 用于格式化日期、数字和消息。 - **fn**: 提供一些通用的函数,如字符串操作、...
4. 开始使用JSTL标签,例如使用`<c:forEach>`进行循环: ```jsp <c:forEach items="${list}" var="item"> ${item.name} </c:forEach> ``` **5. JSTL与MySQL的结合** 在JSTL中,`<sql>`标签可以用来执行SQL...
它可以用来迭代数组、列表、集合、Map等数据结构,常用于表格显示或者循环操作。 4. **`<c:set>`**:用于设置变量。可以将一个表达式的结果赋值给一个页面、请求、会话或应用程序范围内的变量。 5. **`<c:out>`**...
1. **标签丰富**:JSTL 1.2 包含了众多标签,如 `<c:if>`、`<c:choose>`、`<c:when>`、`<c:otherwise>` 用于条件判断,`<c:forEach>` 用于循环,`<c:set>`、`<c:remove>` 对变量进行设置和删除等,这些标签极大地...