日期:2014-05-16 浏览次数:20410 次
通过阅读本系列的 第一篇文章,您对 JSTL 有了初步的了解。我们描述了使用其 表达式语言(EL)来访问数据和操作数据。正如您所了解的那样,EL 用来为 JSTL 定制标记的属性赋予动态值,因此,它所起的作用与 JSP 表达式一样,为内置操作及其它定制标记库指定请求时的属性值。
为了演示 EL 的用法,我们介绍了 core
库中的三个标记: <c:set>
、 <c:remove>
和 <c:out>
。 <c:set>
和 <c:remove>
用于管理限定了作用域的变量;而 <c:out>
用于显示数据,尤其是显示用 EL 计算出的值。在此基础上,接下来本文把注意力集中在 core
库的其余标记上,这些标记可以大致归为两大类别:流控制和 URL 管理。
?
流控制
由于可以用 EL 替代 JSP 表达式来指定动态属性值,因此页面创作人员无需使用脚本编制元素。因为脚本编制元素可能是引起 JSP 页面中维护问题的主要原因,所以 JSTL 的主要优点就在于提供了这样简单(且标准)的替代方法。
EL 从 JSP 容器检索数据,遍历对象层次结构,然后对结果执行简单的操作。不过,除了访问和操作数据之外,JSP 脚本编制元素的另一个常见用法是流控制。尤其是,页面创作人员常借助 scriptlet 来实现迭代或条件内容。然而,因为这样的操作超出了 EL 的能力,所以 core
库提供了几个定制操作来管理流控制,其形式有 迭代、 条件化和 异常处理。
迭代
在 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> |