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>