在JSP的开发中,迭代是经常要使用到的操作。例如,逐行的显示查询的结果等。在早期的JSP中,通常使用Scriptlets来实现Iterator或者Enumeration对象的迭代输出。现在,通过JSTL的迭代标签可以在很大的程度上简化迭代操作。

JSTL所支持的迭代标签有两个,分别是<c:forEach>和<c:forTokens>。在这里介绍的是<c:forEach>标签。

简单点说,<c:forEach>标签的作用就是迭代输出标签内部的内容。它既可以进行固定次数的迭代输出,也可以依据集合中对象的个数来决定迭代的次数。

<c:forEach>标签,需要与el表达式联合使用

<c:forEach>标签的语法定义如下所示。

<c:forEach var="每个变量名字"   items="要迭代的list"   varStatus="每个对象的状态"

begin="循环从哪儿开始"    end="循环到哪儿结束"    step="循环的步长">

循环要输出的东西

</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>

下面写一下,我做的项目中用到的例子:

分页:

<table>
       <tr><th>名字</th><th>说明</th><th>图片预览</th></tr>
        <c:forEach items="${data}" var="item">
            <tr><td>${item.advertName}</td><td>${item.notes}</td><td><img src="${item.defPath}"/></td></tr>
        </c:forEach>
     </table>
    <ul>
        <li><a href='?nowPage=${nowPage-1}'>←上一页</a></li>
                   <c:forEach varStatus="i" begin="1" end="${sumPage}">
                        <c:choose>
                           <c:when test="${nowPage==i.count}">
                              <li class='disabled'>${i.count}</li>
                           </c:when>
                           <c:otherwise>
                               <li  class='active'><a href='?nowPage=${i.count}'>${i.count}</a></li>
                           </c:otherwise>
                        </c:choose>
                   </c:forEach>
            <li><a href='?nowPage=${nowPage+1}'>下一页→</a></li>
      </ul>

首页展示图片的例子:

迭代后台传过来的list, src的路径要写绝对路径,写成相对路径会报错,有时绝对路径用<c:ulr>来写

<c:forEach items="${lists}" var="item">
             <img id="img${i}" height="250" width="500"  class="img" src='UploadImages/${item.advertPath}'/>
            </c:forEach>

获得下标,其中size是后台传过来的list的长度,此处不能写成end="${list.size}"

<c:forEach begin="1" end="${size}"  step="1" varStatus="i">
                    <li> <a href="http://www.baidu.com/" class="showimg">${i.index}</a></li>
                 </c:forEach>

jstl中<c:forEach>的用法的更多相关文章

  1. JSTL 中<c:forEach>使用

    <c:forEach 详解 博客分类: JSTL   <c:forEach>标签用于通用数据循环,它有以下属性 属 性 描 述 是否必须 缺省值 items 进行循环的项目 否 无 ...

  2. JSTL中c:forEach循环里的值的substr操作及对String操作的常用API

    <c:forEach items="${dataList}" var="item" varStatus="itemStatus"> ...

  3. jstl中的foreach标签

    <%@ page import="java.util.ArrayList" %><%@ page import="java.util.List" ...

  4. jstl 中<c:forEach />标签

    <c:forEach>标签有如下属性: 属性 描述 是否必要 默认值 items 要被循环的信息 否 无 begin 开始的元素(0=第一个元素,1=第二个元素) 否 0 end 最后一个 ...

  5. Jstl标签<c:forEach>的用法

    <c:forEach>除了支持数组之外,还有标准J2SE的集合类型,例如:ArrayList.List.LinkedList.Vector.Stack和Set 等等:另外还包括java.u ...

  6. jstl中c:foreach下的表格实现异步刷新

    setInterval(function(){ var url = "${ctx}/alarm/alarm/CompanySort";//填你自己的路径 var data = {} ...

  7. jstl 中 <c:foreach> 多级循环

  8. jstl标签forEach的用法--遍历java的集合

    再讲<c:forEach>之前,现讲一下让EL表达式生效的语句 <% @ page isELIgnored="false"%>这句语句在你想让EL表达式生效 ...

  9. JSTL中foreach与fn表达式

    在jstl中的fn标签也是我们在网页设计中经常要用到的很关键的标签,在使用的时候要先加上头 <%@ taglib uri=" http://java.sun.com/jsp/jstl/ ...

随机推荐

  1. [LeetCode] 197. Rising Temperature_Easy tag: SQL

    Given a Weather table, write a SQL query to find all dates' Ids with higher temperature compared to ...

  2. 2.keras实现-->深度学习用于文本和序列

    1.将文本数据预处理为有用的数据表示 将文本分割成单词(token),并将每一个单词转换为一个向量 将文本分割成单字符(token),并将每一个字符转换为一个向量 提取单词或字符的n-gram(tok ...

  3. testng入门教程2用TestNG编写测试及执行测试

    编写TestNG测试基本上包括以下步骤: 测试和编写业务逻辑,在代码中插入TestNG的注解.. 添加一个testng.xml文件或build.xml中在测试信息(例如类名,您想要运行的组,等..) ...

  4. POJ 3461 Oulipo(KMP,模式串在主串中出现次数 可重叠)

    题意:给你两个字符串p和s,求出p在s中出现的次数. 显然,我们要先把模式串放到前面,之后主串放后面,中间隔开,这样就可以根据前缀数组的性质来求了. 我先想直接把p接到s前面,之后求Next数组对st ...

  5. 你真的了解[super ]关键字吗?

    前言 此篇文章是看了阮老师的es6教程,看到super关键字的时候觉得有必要总结梳理一下,原文还是参考 ECMAScript 6入门. 正文 super 这个关键字,既可以当作函数使用,也可以当作对象 ...

  6. linux服务后台管理

    把进程放到后台有两种方法 1.cmmand & 2.ctrl+z    暂停到后台 查看后台服务  jobs 把后台进程移到前台 fg  %2 工作号  恢复到前台 后台服务继续执行 bg  ...

  7. SP Flash Tool New Version v5.1352.01

    Friends, Sp Tool updated to new version with whole new revamped interface New SP Flash Tool 3.1352.0 ...

  8. 更换mysql数据库的datadir目录

    更换过程如下: 1.新建指定的datadir目录,这里举例如:E:/mysql_datadir/data. 2.关闭mysql57服务器. 3.将原来的datadir目录下面的所有文件拷贝到E:/my ...

  9. FAFU 1136 最长递增子序列

    http://acm.fafu.edu.cn/problem.php?id=1136 根据dp建边,建边的时候记得判断如果原本数的大小就ok了 好久没在自家OJ上刷了 #include <ios ...

  10. python webdriver 显示等待判断元素是可以被点击的,但是执行脚本时,却提示元素不能点击的解决办法?

    我之前运行没问题的环境是firefox版本50,对应的驱动是没有问题的,现在firefox自动升级到了60,驱动没有变,我试着把浏览器装回了50,再试就好了, 所以应该是浏览器跟驱动geckodriv ...