<c:forEach>循环标签可以根据循环条件(通常和el表达式使用,el表达式我们有机会再说,在这里我就默认你会基本的el表达式了),遍历集合并从中取出我们想要的数据。如果在JSP页面中使用JAVA代码来遍历数据,会使页面非常混乱,不利于维护和分析。使用<c:forEach>循环标签可以是页面更加直观、简洁。
<c:forEach>有以下的属性:
items:指定要遍历的集合,相当于下面的str
String[] str={"1","2"}; for(String s:str)
var:设置变量名,并从集合中取出一组数据。相当于上面的s
begin:指定循环的起始位置,如果没有指定,则默认从第一个值开始遍历
end:指定循环的终止位置,如果没有指定,则默认循环到最后一个
step:用于指定循环的步长,例如step=“2”,则会隔一个循环。下面会有例子说明
varStatus:用于指定循环的状态,有一下四个属性值,这个也比较常用,特别是index属性值,表示索引值。
变量 | 类型 | 描述 |
index | int | 位于原集合中的索引值(从0开始) |
count | int | 位于现在子集合中的索引值(从1开始,如果没有begin、end和step,则和index一样) |
first | boolean | 是否是现在子集合的第一位 |
last | boolean | 是否是现在子集合的最后一位 |
我们现在来进行举例说明,通过以下四种用法组合使用来讲解这个用法:
注意:在jsp页面前要加这个,引入jstl标签库<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
第一种:加入items和var
<%String[] str={"1","2","3","4","5","6","7"}; request.setAttribute("str",str); %> <c:forEach items="${str}" var="s"> <c:out value="${s}"></c:out><br><!-- 这个是输出的标签,相当于System.out.println(s); --> </c:forEach>输出结果:
第二种:加入Items、var、begin和end
<%String[] str={"1","2","3","4","5","6","7"}; request.setAttribute("str",str); %> <c:forEach items="${str}" var="s" begin="1" end="5"> <c:out value="${s}"></c:out><br><!-- 这个是输出的标签,相当于System.out.println(s); --> </c:forEach>
输出结果:
第三种:加入Items、var、begin、end和step
<%String[] str={"1","2","3","4","5","6","7"}; request.setAttribute("str",str); %> <c:forEach items="${str}" var="s" begin="1" end="5" step="2"> <c:out value="${s}"></c:out><br><!-- 这个是输出的标签,相当于System.out.println(s); --> </c:forEach>
输出结果:
第四种:加入Items、var、begin、end、step和status
<%String[] str={"1","2","3","4","5","6","7"}; request.setAttribute("str",str); %> <c:forEach items="${str}" var="s" begin="1" end="5" step="2" varStatus="status"> <!--  是换行符,在html中无论你敲多个空格键,最终在网页上只会显示一个空格,所以我们一般用这个作为空格 --> <c:out value="index属性:${status.index}"></c:out> <c:out value="count属性:${status.count}"></c:out> <c:out value="first属性:${status.first }"></c:out> <c:out value="last属性:${status.last }"></c:out><br> </c:forEach>
输出结果:
原来集合:"1","2","3","4","5","6","7" 现在子集合:"2","4","6"