JSTL循环和迭代操作
时间:2018-11-15 12:56:35 来源:igfitidea点击:
在JSP中最常见的任务之一是使用Java for
和while
循环输出一组数据。
通常这样子会导致创建了一个非常不容易阅读的包含大括号的JSP页面
同时,如果发生了错误,找到问题的代码很难。
幸运的是,JSTL为循环和迭代提供了两个有用的操作:
<c:forEach>
<c:forEach>
操作非常有用。可以在集合上循环,也可以重复多次。
在集合上使用<c:forEach>
进行循环
<c:forEach(var = "var" items="collection" varStatus="varStatusName"> <%-- processing of each item here --%> </c:forEach>
- 前两个属性是必需的。
- 在items属性中指定一个集合,
- 在var属性中指定集合中的每个项。
- varStatus属性是可选的。varStatus属性是实现接口LoopTagStatus的类的实例。
- varStatus属性提供了一组有用的属性,例如begin、end、current、index和count。
在集合上使用forEach示例
<%@page contentType="text/html" pageEncoding="UTF-8" import="jsptutorial.*,java.util.*"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html> <html> <head> <title>使用c:forEach循环</title> </head> <body> <% ArrayList<Person> list = new ArrayList<Person>(); Person p1 = new Person("theITroad"); Person p2 = new Person("JSP"); list.add(p1); list.add(p2); request.setAttribute("list", list); %> <c:forEach var="person" items="${requestScope.list}"> <c:out value="${person.name}" /> </c:forEach> </body> </html>
使用<c:forEach>
进行多次交互
语法如下:
<c:forEach var="varName" varStatus="varStatusName" begin="begin" end="end" step="step"> <%-- 这里是要处理的主体内容 --%> </c:forEach>
<c:forTokens>
操作
<c:forTokens>
操作被设计用来遍历由分隔符分隔的标记字符串。
语法如下:
<c:forTokens items="stringOfTokens" delims="delimiters" var="varName" varStatus="varStatusName" begin="begin" end="end" step="step"> <%-- 要处理的body内容 --%> </c:forTokens>
在items属性中定义标记字符串。标记字符串中的每个标记应该用delims属性中定义的分隔符分隔。
var属性用于访问每个标记。
其他属性(如begin、end和step)允许您定义标记中您想要开始和结束的位置以及每个迭代的间隔。
<c:forTokens>
示例
<%@page contentType="text/html" pageEncoding="UTF-8" %> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>c:forTokens循环</title> </head> <body> <c:set var="infoType" value="theITroad,2017,12,JSP" /> <table border="1"> <tr> <td>Site</td> <td>Year</td> <td>Month</td> <td>Course</td> </tr> <tr> <c:forTokens items="${infoType}" delims="," var="info"> <td><c:out value="${info}" /></td> </c:forTokens> </tr> </table> </body> </html>