JSP之forEach标签

本文介绍了JSP中的forEach标签,详细讲解了items、var、begin、end、step和varStatus等属性的用法。通过实例展示了如何遍历集合、数组,并使用step属性控制输出间隔。此外,还提到了varStatus属性可以获取forEach循环状态信息,并以User表格为例进一步说明其应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

forEach标签有6个属性,分别是:items,var、begin、end、step、varStatus
items:需要遍历的集合或数组
var:当遍历到每一个元素时,forEach标签会以var的值为key,当前迭代元素的值为value,将key-value写入到page域
begin:从下标为begin的元素开始迭代(下标默认从0开始)
end:一直迭代到下标为end的元素(下标默认从0开始)
step:每输出一个元素后,跳过step-1个元素再进行输出
varStatus:通过varStatus,我们可以获取当前forEach的状态信息,后面会详细介绍这个属性

我们先来看看items属性和var属性怎么用

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page import="java.util.*" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%--forEach遍历List--%>
    <%
        List list = new ArrayList();
        list.add("one");
        list.add("two");
        list.add("three");
        pageContext.setAttribute("list",list);
    %>
    <c:forEach items="${list}" var="name" >
		${name}
    </c:forEach>

    <%--forEach遍历Set--%>
    <%
        Set set = new HashSet();
        set.add("one");
        set.add("two");
        set.add("three");
        pageContext.setAttribute("set",set);
    %>
    <c:forEach items="${set}" var="name">
        ${name}  <br/>
    </c:forEach>

    <%--forEach遍历Map--%>
    <%
        Map map = new HashMap();
        map.put("username","zhangsan");
        map.put("age",20);
        map.put("address","湖南长沙");
        pageContext.setAttribute("map",map);
    %>
    <c:forEach items="${map}" var="name" >
        ${name.key} = ${name.value} <br/>
    </c:forEach>

    <%--forEach遍历基本类型数组--%>
    <%
        int[] arr = {1,2,3};
        pageContext.setAttribute("arr",arr);
    %>
    <c:forEach items="${arr}" var="name">
        ${name} <br/>
    </c:forEach>

    <%--forEach遍历包装类数组--%>
    <%
        Double[] doubleArr = {1.0,2.0,3.0};
        pageContext.setAttribute("doubleArr",doubleArr);
    %>
    <c:forEach items="${doubleArr}" var="name" >
        ${name} <br/>
    </c:forEach>
</body>
</html>


下面代码证明了,无论从什么域中获取到集合或数组,每一次循环时,都会以var的值为key,以当前迭代的元素为value,将key-value加入到page域中
    <%
        List list = new ArrayList();
        list.add("one");
        list.add("two");
        list.add("three");
        //pageContext.setAttribute("list",list);
        request.setAttribute("list",list);
        //session.setAttribute("list",list);
        //application.setAttribute("list",list);
    %>
    <c:forEach items="${list}" var="name">
        pageScope = ${pageScope.name}   <br/>
        requestScope = ${requestScope.name}    <br/>
        sessionScope = ${sessionScope.name}    <br/>
        applicationScope = ${applicationScope.name}    <br/>
        -------------------------<br/>
        -------------------------<br/>
    </c:forEach>

介绍一下forEach标签的begin和end属性
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page import="java.util.*" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        List list = new ArrayList();
        list.add("one");
        list.add("two");
        list.add("three");
        list.add("four");
        list.add("five");
        list.add("six");
        list.add("seven");
        list.add("eight");
        list.add("nine");
        pageContext.setAttribute("list",list);
    %>
    <%--从下标为3的元素开始迭代--%>
    <c:forEach items="${list}" var="name" begin="3" >
        ${name} <br/>
    </c:forEach>
    -------------------------------------------------<br/>
    -------------------------------------------------<br/>
    <%--一直迭代到下标为6的元素--%>
    <c:forEach items="${list}" var="name" end="6">
        ${name} <br/>
    </c:forEach>
    -------------------------------------------------<br/>
    -------------------------------------------------<br/>
    <%--当然了,begin和end也可以同时使用--%>
    <c:forEach items="${list}" var="name" begin="2" end="5">
        ${name} <br/>
    </c:forEach>

</body>
</html>

对于begin和end还有一个小操作
<c:forEach begin="1" end="10" var="num">
    ${num}
</c:forEach>

下面再说说step属性

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page import="java.util.*" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        List list = new ArrayList();
        list.add("one");
        list.add("two");
        list.add("three");
        list.add("four");
        list.add("five");
        list.add("six");
        list.add("seven");
        list.add("eight");
        list.add("nine");
        pageContext.setAttribute("list",list);
    %>
    <c:forEach items="${list}" var="name" step="2">
        ${name} <br/>
    </c:forEach>
    <c:forEach begin="1" end="10" var="num">
        ${num}
    </c:forEach>

</body>
</html>

one two three four five six seven eight nine
每隔step-1=2-1=1个元素进行输出
那么输出的结果为:one three five seven nine

下面我们利用forEach展示一个User表格
先创建一个User类

package entity;

public class User {

    private String userName;
    private Integer age;
    private String address;

    public User() {
    }

    public User(String userName, Integer age, String address) {
        this.userName = userName;
        this.age = age;
        this.address = address;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "userName='" + userName + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                '}';
    }
}

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page import="java.util.*" %>
<%@ page import="entity.User" %>
<html>
<head>
    <title>Title</title>
    <style>
        #userTable{
            width:600px;
            margin: 0 auto;
            margin-top: 50px;
            border-spacing: 0px;
            border-collapse: collapse;
            text-align: center;
        }
        #userTable>tr,th,td{
            border:1px solid black;
        }
    </style>
</head>
<body>
    <%
        List<User> users = new ArrayList();
        users.add(new User("张三",20,"湖南"));
        users.add(new User("李四",21,"湖北"));
        users.add(new User("王五",22,"北京"));
        users.add(new User("赵六",22,"上海"));
        users.add(new User("孙七",23,"山东"));
        users.add(new User("周八",24,"安徽"));
        users.add(new User("吴九",25,"四川"));
        users.add(new User("郑十",26,"浙江"));
        pageContext.setAttribute("users",users);
    %>
    <table id="userTable">
        <tr>
            <th>编号</th>
            <th>姓名</th>
            <th>年龄</th>
            <th>地址</th>
        </tr>
        <c:forEach items="${users}" var="user" varStatus="vs" >
            <tr>
                <td>${vs.count}</td>
                <td>${user.userName}</td>
                <td>${user.age}</td>
                <td>${user.address}</td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>

最后再介绍一下varStatus这个属性,varStatus其实是一个类,该对类有如下属性

属性说明
index当前元素的索引,从0开始
index当前元素的序号,从1开始
first当前元素是否为首元素,返回的是一个boolean值
last当前元素是否为末尾元素 ,返回的是一个boolean值
begin返回当前forEach标签的begin值,若没有设置begin属性,返回null
end返回当前forEach标签的end值,若没有设置end属性,返回null
step返回当前forEach标签的step值,若没有设置step属性,返回null
current使用current就是调用当前元素的toString()
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page import="java.util.*" %>
<%@ page import="entity.User" %>
<html>
<head>
    <title>Title</title>
    <style>
        #userTable{
            width:600px;
            margin: 0 auto;
            margin-top: 50px;
            border-spacing: 0px;
            border-collapse: collapse;
            text-align: center;
        }
        #userTable>tr,th,td{
            border:1px solid black;
        }
    </style>
</head>
<body>
    <%
        List<User> users = new ArrayList();
        users.add(new User("张三",20,"湖南"));
        users.add(new User("李四",21,"湖北"));
        users.add(new User("王五",22,"北京"));
        users.add(new User("赵六",22,"上海"));
        users.add(new User("孙七",23,"山东"));
        users.add(new User("周八",24,"安徽"));
        users.add(new User("吴九",25,"四川"));
        users.add(new User("郑十",26,"浙江"));
        pageContext.setAttribute("users",users);
    %>
    <table id="userTable">
        <tr>
            <th>index</th>
            <th>count</th>
            <th>first</th>
            <th>last</th>
            <th>begin</th>
            <th>end</th>
            <th>first</th>
            <th>last</th>
            <th>step</th>
            <th>current</th>
        </tr>
        <c:forEach items="${users}" var="user" varStatus="vs" begin="0" step="1" >
            <tr>
                <td>${vs.index}</td>
                <td>${vs.count}</td>
                <td>${vs.first}</td>
                <td>${vs.last}</td>
                <td>${vs.begin}</td>
                <td>${vs.end==null?'yes':'no'}</td>
                <td>${vs.first}</td>
                <td>${vs.last}</td>
                <td>${vs.step}</td>
                <td>${vs.current}</td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>

下面用varStatus的count对表格的颜色做一下调整
单行使用一种颜色
双行使用另一种颜色
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page import="java.util.*" %>
<%@ page import="entity.User" %>
<html>
<head>
    <title>Title</title>
    <style>
        #userTable{
            width:600px;
            margin: 0 auto;
            margin-top: 50px;
            border-spacing: 0px;
            border-collapse: collapse;
            text-align: center;
        }
        #userTable>tr,th,td{
            border:1px solid black;
        }
        .odd {
            background-color: rgba(255,0,0,0.1);
        }
        .even {
            background-color: rgba(255,0,255,0.1);
        }
    </style>
</head>
<body>
    <%
        List<User> users = new ArrayList();
        users.add(new User("张三",20,"湖南"));
        users.add(new User("李四",21,"湖北"));
        users.add(new User("王五",22,"北京"));
        users.add(new User("赵六",22,"上海"));
        users.add(new User("孙七",23,"山东"));
        users.add(new User("周八",24,"安徽"));
        users.add(new User("吴九",25,"四川"));
        users.add(new User("郑十",26,"浙江"));
        pageContext.setAttribute("users",users);
    %>
    <table id="userTable">
        <tr>
            <th>序号</th>
            <th>姓名</th>
            <th>年龄</th>
            <th>地址</th>
        </tr>
        <c:forEach items="${users}" var="user" varStatus="vs" >
            <tr class="${vs.count%2==0?'odd':'even'}">
                <td>${vs.count}</td>
                <td>${user.userName}</td>
                <td>${user.age}</td>
                <td>${user.address}</td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值