<c:if test="${status.totalVisits == 1000000}" var="visits">
You are the millionth visitor to our site! Congratulations!
</c:if>
下面我们展示了用c:choose、 c:when、 和 c:otherwise交换逻辑的JSTL的支持。一组c:when动作可能包括在一个备选的标记内,如果在c:when块中任何表达式计算值为真的话,就不用计算c:choose动作内的测试。如果c:when块中没有一个测试计算值为真的时候:如果出现c:otherwise动作内容时,则计算c:otherwise动作的内容:
<c:choose>
<c:when test="${item.type == ''book''}">
</c:when>
<c:when test="${item.type == ''electronics''}">
</c:when>
<c:when test="${item.type == ''toy''}">
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
c:foreach动作提供一个容易的方法来迭代一个集合的元素。如果你想只迭代集合的一部分的话,你可以分别用begin、 end、 和 step属性指定起点、终点和一个递增值。在下面的例子中,我们在变量customerNames中迭代一个集合的内容;在每个循环中,下一个元素输入到变量名内并在c:foreach动作的体内计算:
<table>
<c:forEach var="name" items="${customerNames}">
<tr><td><c:out value="${name}"/></td></tr>
</c:forEach>
</table>
记得Java的StringTokenizer类吗?有了c:forTokens动作,你可以用JSTL获得类似的功能。这个程序片断可使用在delims属性中定义的定界符通过items String属性中的条目迭代。注意,items 属性不必是一个字符直接量;它可以是任何有效的EL表达式:
<table>
<c:forTokens items="47,52,53,55,46,22,16,2" delim="," var="dailyPrice">
<tr><td><c:out value="${dailyPrice}"/></td></tr>
</c:forTokens>
</table>
在接下来的完整的JSTL页中,我列出了已经传递到该页的所有参数。param 和paramValues对象是映射关键字到一个或多个值的Java Map集。在本例中,我们找出了用于集合的每个MapEntry的关键字即参数名,并且使用关键字来查找所有与关键字关联的参数值:
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<html>
<body>
<head>
<title>Parameter Listing Example</title>
</head>
<br>
<b>Parameter values passed to this page for each parameter: </b>
<table border="2">
<c:forEach var="current" items="${param}">
<tr>
<td>
<b><c:out value="${current.key}" /></b>
</td>
<c:forEach var="aVal" items="${paramValues[current.key]}">
<td>
<c:out value="${aVal}" />
</td>
</c:forEach>
&