在JSP的开发中,迭代是经常要使用到的操作。例如,逐行的显示查询的结果等。在早期的JSP中,通常使用Scriptlets来实现Iterator或者Enumeration对象的迭代输出。现在,通过JSTL的迭代标签可以在很大的程度上简化迭代操作。
JSTL所支持的迭代标签有两个,分别是<c
:forEach
>和<c
:forTokens>。在这里介绍的是<c
:forEach
>标签。
简单点说,<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:forEach var="item" items="${contents}" varStatus="status">
$status.count:${item}
</c:forEach>
下面的例子是一个固定次数的迭代,用来输出1到9的平方。
<c:forEach var="x" begin="1" end="9" step="1">
${x*x}
</c:forEach>
需求:4列之后换一行重起一个<tr>
<tr>
<td height="25" align="center" valign="middle" class="STYLE6 STYLE8">宽和高</td>
<!--个数是不确定的所以不能用begin end-->
<c:forEach var="item" items="${scrnSizeList}" begin="0" end="4">
<td height="25" align="center" valign="middle" class="STYLE6 STYLE8">
${item.width}×${item.height}
</td>
</c:forEach>
</tr>
<table width="500" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="25" align="center" valign="middle" class="STYLE6 STYLE8">宽和高</td>
<!--个数是不确定的所以不能用begin end-->
<c:forEach var="item" items="${scrnSizeList}" begin="0" end="4">
<td height="25" align="center" valign="middle" class="STYLE6 STYLE8">
${item.width}×${item.height}
</td>
<c:if test="${(status.index+1) mod 4 == 0}">
</tr><tr>
<td>第一列(宽和高)</td>
</c:if>
</c:forEach>
</tr>
</table>
分享到:
相关推荐
1.关键字:JSTL标签、<c:choose>、<c:forEach>、<c:forTokens>、<c:if>、<c:import>、<c:otherwise>、<c:out>、<c:param>、<c:redirect>、<c:remove>、<c:url>、<c:when>、<c:set>、<c:catch>
EL表达式 (详解) EL表达式 1、EL简介 1)语法结构 ${expression} 2)[]与.运算符 EL 提供.和[]两种运算符来存取数据。 当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 ...
foreach基本语法如下: FOREACH ($array_variable as $value) { [code to execute] } or FOREACH ($array_variable as $key => $value) { [code to execute] } 在这两种情况下,多次[代码执行]将被处死是等于在$ ...
foreach (ConstructorInfo c in ci) //遍历每一个构造函数 { ParameterInfo[] ps = c.GetParameters(); //取出每个构造函数的所有参数 foreach (ParameterInfo pi in ps) //遍历并打印所该构造函数的所有参数 {...
foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。有两种语法,第二种比较次要但却是第一种的有用的扩展。 复制代码 代码如下:foreach (array_expression as $value) ...
1.js 数组循环遍历。 数组循环变量,最先想到的就是 for(var i=0;i <HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME="Author" CO
本文主要记录我在学习C#中foreach遍历原理的心得体会。 对集合中的要素进行遍历是所有编码中经常涉及到的操作,因此大部分编程语言都把此过程写进了语法中,比如C#中的foreach。经常会看到下面的遍历代码: var ...
因此,在这篇文章中,我们一边讲数组,一边讲foreach。 foreach有两种语法: 第一种:遍历给定的 数组语句 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一...
这是重学 JS 系列的第三篇文章,写这个系列的初衷也是为了夯实... arr.forEach(async item => { const res = await fetch(item) console.log(res) }) console.log('end') } function fetch(x) { return new Pro
JavaScript数组的 forEach()方法调用数组中的每个元素。 语法 array.forEach(callback[, thisObject]); 下面是参数的详细信息: callback : 函数测试数组的每个元素。 thisObject : 对象作为该执行回调时使用。 ...
JavaScript 语句之常用 for 循环详解 JavaScript中循环语句不少,for、for in、for of和forEach循环,今天对比Array、Object、Set(ES6)、Map(ES6)四种数据结构循环语句支持的情况及区别。 新建四种数据类型的测试...
本文实例讲述了JavaScript遍历数组的三种方法map、forEach与filter。分享给大家供大家参考,具体如下: 前言 近一段时间,因为项目原因,会经常在前端对数组进行遍历、处理,JS自带的遍历方法有很多种,往往不加留意...
forEach es5出来的方法,这是我在react中用的最多的遍历方法之一,用法如下: models.forEach(model => app.model(model)); dva里面经常这么写。 写法很简单,经常用于通过这个数组内的数据创造新的结构,但是...
在foreach语句中使用枚举,可以迭代数组或集合中的元素,且无须知道集合中的元素的个数。如图显示了调用foreach方法的客户端和集合之间的关系。数组或集合实现带GetEnumerator()方法的IEnumerable接口。...
得到一个xml型的对象:复制代码 代码如下:$resp = $this->c->execute($req, $sessionKey);//获得xml对象$items=$resp->items;那么读取对象的值,就用$items->item,或者$items->item->price,如此操作很不方便,不...
foreach ($_GET as $regex => $value) { preg_replace('/(' . $regex . ')/ei','strtolower("\\1")',$value); } 测试过程中发现通过浏览器的方式传入数据的时候,会将 . + 等特殊字符转换为 _ 。 这里涉及到了php...
昨天在 github 上准备找找 C# 9 又有哪些新语法糖可以试用,不觉在一个文档上看到一个很奇怪的写法: foreach (var item in myArray[0..5]) 哈哈,熟悉又陌生,玩过python的朋友对这个 [0..5] 太熟悉不过了,居然在 ...
这篇文章是有关 CodeIgniter 的(以下简称 CI),CI 是一个达成以上目标的框架。 如果你只是要达成一个最终的结果,而把中间所有的编码细节和复杂统统丢给一个框架,CI 是你最好的朋友。 CI 有很多优点:免费,轻...