JSTL循环和迭代操作

时间:2018-11-15 12:56:35  来源:igfitidea点击:

在JSP中最常见的任务之一是使用Java forwhile循环输出一组数据。

通常这样子会导致创建了一个非常不容易阅读的包含大括号的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>