`
jinxhj2003
  • 浏览: 148363 次
  • 性别: Icon_minigender_1
  • 来自: 南昌
社区版块
存档分类
最新评论

<C:forEach>标签

    博客分类:
  • Jsp
阅读更多
在 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>;


当出现 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>;




如图 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>; 标记支持 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>;


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







--------------------------------------------------------------------------------

除 <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:forEach标签的使用祥解

    &lt;% Map&lt;String, String&gt; map = new HashMap&lt;&gt;(); map.put("key1", "value1"); map.put("key2", "value2"); request.setAttribute("myMap", map); %&gt; ... &lt;!-- 遍历键 --&gt; &lt;c:forEach items="${myMap.keySet()}" var=...

    JSTL标准标签库 <C:out>、<c:set>、<c:remove>和<c:catch>标记 <c:if>、<c:choose>、<c:when>和<c:otherwise>标记 <c:forEach>和<c:forTokens>标记

    1. `&lt;c:forEach&gt;`:用于遍历集合、数组或迭代对象,实现循环操作。 2. `&lt;c:forTokens&gt;`:对字符串进行分割,然后对每个分割出来的元素进行循环处理。 **使用JSTL的好处**: - 提高代码的可读性:通过使用XML样式的...

    c:foreach的各种用法

    在JSP(JavaServer Pages)开发中,`&lt;c:forEach&gt;` 是一个非常重要的标签,它属于JSTL(JavaServer Pages Standard Tag Library)的一部分,主要用于循环处理集合、数组等数据结构。相较于传统的JSP Scriptlets,使用...

    c标签遍历集合嵌套的List集合

    本文将详细介绍如何利用`c:forEach`标签来遍历这种嵌套的数据结构。 #### 1. 基础知识介绍 在Java Web项目中,通常会使用`ModelAndView`或`ModelMap`等容器来传递数据至前端页面。这些容器可以存放任何类型的Java...

    c标签-if-foreach-jar

    在这个主题"**c标签-if-foreach-jar**"中,主要涉及到的是JSTL的两个核心标签`&lt;c:if&gt;`和`&lt;c:forEach&gt;`,它们是JSTL提供的条件判断和循环控制标签,通常与`jstl.jar`包一起使用。 首先,让我们详细了解**&lt;c:if&gt;**...

    JSP使用C标签时必须引入的jar包

    C标签库提供了一些类似于Java编程中的控制结构,例如`&lt;c:if&gt;`, `&lt;c:forEach&gt;`, `&lt;c:choose&gt;`, `&lt;c:set&gt;`等,这些标签能够帮助开发者更方便地在JSP页面上进行逻辑处理,而无需过多地编写脚本let或Java表达式。...

    javaWeb练习题.docx

    - JSTL是标准标签库,提供了一系列标签简化JSP页面的编写,如forEach用于迭代。 - EL是表达式语言,允许在JSP页面中简洁地访问数据,如 `${item.price}`。 9. **权限过滤器**: - 权限过滤器通常用于检查用户...

    JSTL标签使用总结

    本文将详细介绍JSTL中的核心标签:&lt;c:if&gt;、&lt;c:choose&gt;、&lt;c:forEach&gt;、&lt;c:forTokens&gt;、&lt;c:catch&gt;、&lt;c:remove&gt;、&lt;c:set&gt;、&lt;c:import&gt;、&lt;c:redirect&gt;、&lt;c:url&gt;以及与之相关的&lt;fmt&gt;标签库。 #### 1. &lt;c:if&gt; &lt;c:if&gt;标签...

    JSTL常用标签总结

    示例代码如下:&lt;c:forEach items="${users}" var="user"&gt;, 其中items属性指定了要遍历的集合对象,而var属性用于在遍历过程中引用当前的元素。 以上便是JSTL中一些常用标签的介绍和示例。值得注意的是,在使用这些...

    c标签 c标签 c标签 c标签

    除了这些,JSTL还提供了其他标签,如`&lt;c:set&gt;`用于设置变量,`&lt;c:if&gt;`和`&lt;c:choose&gt;`进行条件判断,`&lt;c:forEach&gt;`进行循环遍历,等等。使用JSTL可以使JSP代码更加整洁,更易于理解和维护,是现代JSP开发中的重要工具...

    学习JSTL标签参考手册.pdf

    - `&lt;c:forEach&gt;`:这是最常用的标签之一,用于遍历集合或执行固定次数的循环。 **4.URL操作标签:** - `&lt;c:import&gt;`:导入外部资源。 - `&lt;c:url&gt;`:创建URL。 - `&lt;c:redirect&gt;`:执行重定向。 **&lt;c:forEach&gt; 标签...

    JSP标准标签库

    - &lt;c:forEach&gt;标签可以遍历一个数组、集合或其他实现了Iterable接口的对象,每次迭代可以访问当前的元素。 5. URL操作标签:提供了对URL进行操作的功能,例如引入页面资源、设置参数和重定向等。 - &lt;c:import&gt;...

    web开发必备:JSP标准标签库JSP的语法介绍及jsp页面导入标签方法.docx

    - 示例:`&lt;c:forEach items="${list}" var="item"&gt;...&lt;/c:forEach&gt;` - **`&lt;c:set&gt;`**:设置变量的值。 - 示例:`&lt;c:set var="varName" value="value"/&gt;` #### 2. 国际化标签库 (`&lt;fmt:*&gt;`) - **`&lt;fmt:message&gt;`*...

    JSTL标签参考手册.pdf

    例如,核心标签库(core)提供了基本的流程控制标签如条件判断(&lt;c:if&gt;)和循环(&lt;c:forEach&gt;),格式化标签库(fmt)用于格式化数字和日期等,函数库(fn)提供了通用的字符串和集合操作函数等。 在文档中提到的&lt;%...

    JSP 标准标签库(c标签库)

    &lt;c:forEach items="${yourList}" var="item"&gt; ${item} &lt;/c:forEach&gt; ``` - **`&lt;c:remove&gt;`**: 用于删除一个变量。例如: ```jsp &lt;c:remove var="name"/&gt; ``` 3. **JSTL与EL(Expression Language)的配合**...

    jstl标签库

    - **迭代标签**:`&lt;c:forEach&gt;`、`&lt;c:forTokens&gt;`,实现循环遍历。 - **URL操作标签**:`&lt;c:import&gt;`、`&lt;c:param&gt;`、`&lt;c:url&gt;`、`&lt;c:redirect&gt;`,用于处理URL相关的操作。 **4. 使用JSTL的步骤** 1. 将JSTL的`....

    经典入门教程:JSP标准标签库

    1. **Core标签库**:提供了基本的控制流操作,如迭代(`&lt;c:forEach&gt;`)、条件语句(`&lt;c:if&gt;`、`&lt;c:choose&gt;`)、URL处理(`&lt;c:url&gt;`、`&lt;c:param&gt;`)等。 2. **XML标签库**:用于处理XML文档,包括解析XML(`&lt;x:parse&gt;...

    c标签 sql标签 格式化标签fmt的使用

    &lt;c:forEach var="item" items="${list}" varStatus="status"&gt; &lt;!-- 循环体内容 --&gt; &lt;/c:forEach&gt; ``` - **示例**: ```jsp &lt;c:forEach var="name" items="${list}" varStatus="i"&gt; ${i.index} // 从0开始的...

    jsp中常见的一些标签应用

    - **带条件的遍历**:`&lt;c:forEach items="${arry1}" var="n" begin="3" end="5" step="2"&gt;`。其中`begin`、`end`和`step`分别表示开始位置、结束位置和步长。 #### `c:if` 标签 用于条件判断,仅当条件为真时才会...

    jstl c标签jar包

    C标签库是JSTL的一部分,它包含了类似于Java语言的循环和条件语句的标签,如`&lt;c:forEach&gt;`、`&lt;c:if&gt;`、`&lt;c:choose&gt;`等。这些标签使得JSP开发者能够更清晰地组织代码,而不是直接在页面上写Java脚本。例如,`&lt;c:...

Global site tag (gtag.js) - Google Analytics