`
zyj7261349
  • 浏览: 26664 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论

JSTL循环标签foreach

阅读更多
迭代

在 Web 应用程序环境中,迭代主要用于访存和显示数据集,通常是以列表或表中的一系列行的形式显示。实现迭代内容的主要 JSTL 操作是 <c:forEach> 定制标记。该标记支持两种不同样式的迭代:整数范围上的迭代(类似 Java 语言的 for 语句)和集合上的迭代(类似 Java 语言的 Iterator 和 Enumeration 类)。

进行整数范围迭代用到了清单 1 中所示的 <c:forEach> 标记的语法。 begin 和 end 属性要么是静态整数值,要么是可以得出整数值的表达式。它们分别指定迭代索引的初始值以及迭代索引的终止值。当使用 <c:forEach> 在整数范围内进行迭代时,这两个属性是必需的,而其它所有属性都是可选的。


清单 1. 通过 <c:forEach> 操作进行数字迭代的语法
查看复制到剪切板打印
<c:forEach var="   
        name" varStatus="  
        name"   
    begin="   
        expression" end="  
        expression" step="  
        expression">   
     
        body content   
</c:forEach>  

<c:forEach var="
        name" varStatus="
        name"
    begin="
        expression" end="
        expression" step="
        expression">
  
        body content
</c:forEach>


当出现 step 时,它也必须是整数值。它指定每次迭代后索引的增量。这样,迭代索引从 begin 属性的值开始,以 step 属性的值为增量进行递增,在迭代索引超过 end 属性的值时停止迭代。注:如果省略了 step 属性,那么步长缺省为 1。

如果指定了 var 属性,那么将会创建一个带有指定名称的并限定了作用域的变量,并将每次迭代的当前索引值赋给该变量。这一限定了作用域的变量具有嵌套式可视性 ― 只可以在 <c:forEach> 标记体内对其进行访问。(我们很快将讨论可选属性 varStatus 的用法。)清单 2 显示了对一组固定整数值进行迭代的 <c:forEach> 操作示例。


清单 2. 使用 <c:forEach> 标记来生成表列数据,这些数据对应于某一范围内的数值
查看复制到剪切板打印
<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>  

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


如图 3 中所示,上面的示例代码生成了一张表,显示前五个偶数及其平方。这是通过将 begin 和 step 属性值指定为 2,而将 end 属性值指定为 10 实现的。此外,用 var 属性创建用于存储索引值的限定了作用域的变量, <c:forEach> 标记体内引用了该变量。尤其是,使用了一对 <c:out> 操作来显示索引及其平方,其中索引的平方是使用一个简单的表达式计算得来的。


图 3. 清单 2 的输出


在对集合的成员进行迭代时,用到了 <c:forEach> 标记的另一个属性: items 属性,清单 3 中显示了该属性。当使用这种形式的 <c:forEach> 标记时, items 属性是唯一必需的属性。 items 属性的值应该是一个集合,对该集合的成员进行迭代,通常使用 EL 表达式指定值。如果变量名称是通过 <c:forEach> 标记的 item 属性指定的,那么对于每次迭代该已命名变量都将被绑定到集合后续元素上。


清单 3. 通过 <c:forEach> 操作对集合进行迭代的语法
查看复制到剪切板打印
<c:forEach var="   
        name" items="  
        expression" varStatus="  
        name"   
    begin="   
        expression" end="  
        expression" step="  
        expression">   
     
        body content   
</c:forEach>  

<c:forEach var="
        name" items="
        expression" varStatus="
        name"
    begin="
        expression" end="
        expression" step="
        expression">
  
        body content
</c:forEach>

<c:forEach> 标记支持 Java 平台所提供的所有标准集合类型。此外,您可以使用该操作来迭代数组(包括基本类型数组)中的元素。表 1 列出了 items 属性所支持的所有值。正如表的最后一行所指出的那样,JSTL 定义了它自己的接口 javax.servlet.jsp.jstl.sql.Result ,用来迭代 SQL 查询的结果。(我们将在本系列后面的文章中详细讨论这一功能。)

表 1. <c:forEach> 标记的 items 属性所支持的集合
items 的值  所产生的 item 值 
java.util.Collection  调用 iterator() 所获得的元素 
java.util.Map  java.util.Map.Entry 的实例 
java.util.Iterator  迭代器元素
java.util.Enumeration  枚举元素
Object 实例数组  数组元素
基本类型值数组 经过包装的数组元素
用逗号定界的 String  子字符串
javax.servlet.jsp.jstl.sql.Result  SQL 查询所获得的行


可以使用 begin 、 end 和 step 属性来限定在迭代中包含集合中哪些元素。和通过 <c:forEach> 进行数字迭代的情形一样,在迭代集合中的元素时同样要维护一个迭代索引。 <c:forEach> 标记实际上只处理那些与索引值相对应的元素,这些索引值与指定的 begin 、 end 和 step 值相匹配。

清单 4 显示了用来迭代集合的 <c:forEach> 标记。对于该 JSP 代码段, entryList 这一限定了作用域的变量被设置成了 Entry 对象列表(确切的说, ArrayList )。 <c:forEach> 标记依次处理列表中的每个元素,将其赋给一个限定了作用域的变量 blogEntry ,然后生成两个表行 ― 一个用于 Weblog 项的 title ,另一个则用于该项 text 。这些特性是通过一对带有相应 EL 表达式的 <c:out> 操作从 blogEntry 变量检索得到的。注:由于 Weblog 项的标题和文本都可能包含 HTML 标记,因此这两个 <c:out> 标记的 escapeXml 属性都被设置成了 false。图 4 显示了结果。


清单 4. 使用 <c:forEach> 标记显示表示给定日期的 Weblog 项
查看复制到剪切板打印
<table>   
  <c:forEach items="${entryList}" var="blogEntry">   
    <tr><td align="left" class="blogTitle">   
      <c:out value="${blogEntry.title}" escapeXml="false"/>   
    </td></tr>   
    <tr><td align="left" class="blogText">   
      <c:out value="${blogEntry.text}" escapeXml="false"/>   
    </td></tr>   
  </c:forEach>   
</table>  

<table>
  <c:forEach items="${entryList}" var="blogEntry">
    <tr><td align="left" class="blogTitle">
      <c:out value="${blogEntry.title}" escapeXml="false"/>
    </td></tr>
    <tr><td align="left" class="blogText">
      <c:out value="${blogEntry.text}" escapeXml="false"/>
    </td></tr>
  </c:forEach>
</table>

图 4. 清单 4 的输出


不论是对整数还是对集合进行迭代, <c:forEach> 剩余的属性 varStatus 所起的作用相同。和 var 属性一样, varStatus 用于创建限定了作用域的变量。不过,由 varStatus 属性命名的变量并不存储当前索引值或当前元素,而是赋予 javax.servlet.jsp.jstl.core.LoopTagStatus 类的实例。该类定义了一组特性,它们描述了迭代的当前状态,表 2 中列出了这些特性。

表 2. LoopTagStatus 对象的特性
特性  Getter  描述 
current getCurrent()  当前这次迭代的(集合中的)项
index getIndex()  当前这次迭代从 0 开始的迭代索引
count getCount()  当前这次迭代从 1 开始的迭代计数
first isFirst()  用来表明当前这轮迭代是否为第一次迭代的标志
last isLast()  用来表明当前这轮迭代是否为最后一次迭代的标志
begin getBegin()  begin 属性值 
end getEnd()  end 属性值 
step getStep()  step 属性值 




清单 5 显示了关于如何使用 varStatus 属性的一个示例。这个示例修改了清单 4 中的代码,将 Weblog 项的编号添加到显示 Weblog 标题(title)的表行。它是通过为 varStatus 属性指定一个值,然后访问所生成的限定了作用域的变量的 count 特性来实现这一点的。结果显示在图 5 中。


清单 5. 使用 varStatus 属性来显示 Weblog 项的数目
查看复制到剪切板打印
<table>   
  <c:forEach items=   
    "${entryList}" var="blogEntry" varStatus="status">   
    <tr><td align="left" class="blogTitle">   
      <c:out value="${status.count}"/>.   
      <c:out value="${blogEntry.title}" escapeXml="false"/>   
    </td></tr>   
    <tr><td align="left" class="blogText">   
      <c:out value="${blogEntry.text}" escapeXml="false"/>   
    </td></tr>   
  </c:forEach>   
</table>  

<table>
  <c:forEach items=
    "${entryList}" var="blogEntry" varStatus="status">
    <tr><td align="left" class="blogTitle">
      <c:out value="${status.count}"/>.
      <c:out value="${blogEntry.title}" escapeXml="false"/>
    </td></tr>
    <tr><td align="left" class="blogText">
      <c:out value="${blogEntry.text}" escapeXml="false"/>
    </td></tr>
  </c:forEach>
</table>



图 5. 清单 5 的输出


除 <c:forEach> 以外, core 库还提供了另一个迭代标记: <c:forTokens> 。JSTL 的这个定制操作与 Java 语言的 StringTokenizer 类的作用相似。清单 6 中显示的 <c:forTokens> 标记除了比 <c:forEach> 的面向集合版本多一个属性之外,其它属性都相同。对于 <c:forTokens> 而言,通过 items 属性指定要标记化的字符串,而通过 delims 属性提供用于生成标记的一组定界符。和 <c:forEach> 的情形一样,可以使用 begin 、 end 和 step 属性将要处理的标记限定为那些与相应索引值相匹配的标记。


清单 6. 使用 <c:forTokens> 操作来迭代字符串标记的语法
查看复制到剪切板打印
<c:forTokens var="   
        name" items="  
        expression"   
    delims="   
        expression" varStatus="  
        name"   
    begin="   
        expression" end="  
        expression" step="  
        expression">   
     
        body content   
</c:forTokens>  

<c:forTokens var="
        name" items="
        expression"
    delims="
        expression" varStatus="
        name"
    begin="
        expression" end="
        expression" step="
        expression">
  
        body content
</c:forTokens>
分享到:
评论

相关推荐

    jstl标签 forEach详解

    jstl forEach 标签是 JavaServer Pages Standard Tag Library (JSTL) 中的一个标签,用于循环控制,可以将集合中的成员循序浏览一遍。该标签的运作方式为当条件符合时,就会持续重复执行的本体内容。 语法 --------...

    JSTL循环语法,java

    #### 二、JSTL循环标签——`&lt;c:forEach&gt;`详解 ##### 2.1 `&lt;c:forEach&gt;`标签基本用法 `&lt;c:forEach&gt;`是JSTL中最常用的循环标签之一,用于对集合或数组进行迭代操作。其基本语法结构如下: ```jsp &lt;c:forEach items=...

    JSTL 以及自定义标签开发相关

    JSTL 以及自定义标签...3.循环标签:forEach、forTokens 4.URL操作标签:import、url、redirect 使用标签时,一定要在jsp文件头加入以下代码: &lt;%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt;

    JSTL常用标签总结

    最后,&lt;c:forEach&gt;标签是一个循环控制标签,用于遍历数组或集合中的元素。例如,如果页面中有一个存储了多个用户信息的ArrayList集合,可以通过&lt;c:forEach&gt;来遍历它。示例代码如下:&lt;c:forEach items="${users}" var...

    jstl1.2标签库jar包

    - `c:forEach`:循环遍历集合。 - `c:forTokens`:基于分隔符的遍历。 - `c:remove`:删除一个变量。 - `c:redirect`, `c:url`:URL重定向和构造。 - **EL表达式支持** JSTL 1.2很好地整合了EL,使得开发者...

    jstl标准标签库

    - `&lt;c:forEach&gt;`:用于遍历集合或数组,执行循环操作。 3. **其他JSTL标签库**: - **fmt**库:提供日期和数字的格式化功能。 4. **EL表达式(Expression Language)**: EL是JSP 2.0引入的一种轻量级表达式...

    JAVAEE实验报告EL表达式和jstl标签库的使用.pdf

    1. 循环输出数据:JSTL 的 foreach 标签可以用于循环输出数据。 例如:&lt;c:forEach var="emp" items="${emplist}"&gt; 循环输出 emplist 集合中的数据 2. 条件判断:JSTL 的 if 标签可以用于条件判断。 例如:${user....

    JSTL核心标签库的jar包

    - `&lt;c:forEach&gt;`:遍历数组、集合或范围,用于循环输出。 - `&lt;c:forTokens&gt;`:根据分隔符拆分字符串并进行遍历。 2. **输出与控制**: - `&lt;c:set&gt;`:设置变量并存储在作用域中(page, request, session, ...

    jstl标签使用文档,jstl标签使用帮助文档

    **JSTL(JavaServer Pages Standard Tag Library)** 是一个标准的标签库,它为Java Servlet和JavaServer Pages (JSP) 提供了强大的处理能力,使得开发者可以通过使用标签而不是脚本来实现页面逻辑,从而提高了代码...

    EL表达式及JSTL标准标签

    以上代码展示了如何使用JSTL中的`&lt;c:out&gt;`, `&lt;c:if&gt;`, 和`&lt;c:forEach&gt;`标签进行数据输出、条件判断和循环处理。 ### 结论 EL表达式和JSTL标准标签库是JSP开发者不可或缺的工具,它们不仅简化了JSP页面的开发过程,...

    jstl标签库的配置

    这样,你就可以使用如`&lt;c:forEach&gt;`、`&lt;fmt:formatDate&gt;`等JSTL标签了。 **JSTL常见标签及其用法**: - `c:set`:设置变量,如`张三"/&gt;`。 - `c:out`:安全地输出变量,防止XSS攻击,如`${name}"/&gt;`。 - `c:if`和`...

    JSTL核心标签库的一些应用

    以上只是JSTL核心标签库的一部分功能,实际应用中还有更多标签,如循环标签`&lt;c:forEach&gt;`、迭代标签`&lt;c:forTokens&gt;`等。这些标签在处理数据、控制流程等方面提供了极大的便利,使得JSP页面更加简洁、易读,也更符合...

    JSTL 核心标签库 使用

    本文将深入探讨JSTL的核心标签库(core tag library),主要包括`&lt;c:set&gt;`、`&lt;c:remove&gt;`、`&lt;c:catch&gt;`、`&lt;c:if&gt;`、`&lt;c:choose&gt;`以及`&lt;c:forEach&gt;`等标签的使用。 1. `&lt;c:set&gt;`标签: `&lt;c:set&gt;`用于设置变量的值,...

    JSTL循环显示的用法.pdf

    ### JSTL循环显示的用法 #### 一、引言 JSTL(JavaServer Pages Standard Tag Library)是一组标准标签库,用于简化JSP(JavaServer Pages)页面的开发工作。它提供了多种功能强大的标签,如条件处理、循环处理、...

    JSTL标准标签库的应用

    以上代码展示了如何使用JSTL的核心标签库中的`&lt;c:forEach&gt;`标签来遍历用户列表并显示每个用户的名字。这种方式使得JSP页面更加简洁、易于维护。 #### 结论 JSTL通过提供一系列功能丰富的标签和EL语言,极大地简化...

    JSTL网络标签与SSH类参考手册

    例如`&lt;c:if&gt;`用于条件判断,`&lt;c:forEach&gt;`用于循环迭代,`&lt;c:set&gt;`用于设置变量,`&lt;c:out&gt;`用于安全地输出变量值,避免XSS攻击。 2. **XML标签库**:用于处理XML文档,包括解析、转换和操作XML内容。`&lt;x:parse&gt;`...

    JSTL(jsp标准标签库)

    ### JSTL(JSP标准标签库):增强JSP页面功能的关键技术 JSTL,全称为JSP Standard Tag Library(JSP标准标签库),是JavaServer Pages(JSP)技术的重要补充,旨在简化JSP页面的开发,提供了一系列预定义的、可...

    JSTL 核心标签库

    JSTL核心标签库主要包含四个类别:表达式控制标签、流程控制标签、循环标签和URL操作标签。 1. **表达式控制标签**: - `&lt;c:out&gt;`:这个标签用于输出数据,它可以显示字符串、表达式的值。`value`属性指定要输出的...

    JSTL核心标签库使用范例

    5. `&lt;c:forEach&gt;`:循环。用于遍历集合、数组或其他可迭代对象。 6. `&lt;c:remove&gt;`:删除变量。从指定的作用域中移除一个变量。 7. `&lt;c:redirect&gt;`和`&lt;c:forward&gt;`:页面重定向和请求转发。用于控制请求的流向。 **...

    JSTL标签配置流程

    - `&lt;c:forEach&gt;`:用于循环遍历集合或数组。 - `&lt;c:if&gt;`和`&lt;c:choose&gt;`:条件判断标签,实现类似Java的if和switch语句。 - `&lt;c:set&gt;`:设置变量。 - `&lt;c:out&gt;`:输出值,可以防止XSS攻击。 - `&lt;c:remove&gt;`:删除变量...

Global site tag (gtag.js) - Google Analytics