1.迭代标签
1.1 <c:forEach>
标签
<c:forEach>
在一个Collection中迭代计算他的body内容,或是重复迭代固定的次数。
(1)最简单的迭代标签
<c:forEach var="i" begin="1" end="10">
<c:out value="${i}"></c:out>-->
</c:forEach>
在这里,var
代表当前条目的变量名称,begin
指的是开始的元素,end
指结束的元素,两者都包含在内。
它的输出是这样的:
另外,我们也可以通过step
属性来指定步长,如下:
<c:forEach var="i" begin="1" end="10" step="2">
<c:out value="${i}"></c:out>-->
</c:forEach>
这里表示输出的是1到10之间的所有奇数。
(2)迭代一个ArrayList集合
假设我们在requestScope中放入了一个ArrayList
,中间加入的是User对象,如下:
<%
ArrayList<User> array = new ArrayList<User>();
User user1 = new User();
user1.setName("u1");
user1.setAge(20);
User user2 = new User();
user2.setName("u2");
user2.setAge(21);
User user3 = new User();
user3.setName("u3");
user3.setAge(22);
array.add(user1);
array.add(user2);
array.add(user3);
request.setAttribute("users", array);
%>
我们利用forEach标签可以很简单的输出这个ArrayList集合中的内容,如下:
<c:forEach items="${users}" var="user">
<c:out value="${user.name}"></c:out>
<c:out value="${user.age}"></c:out>
<br>
</c:forEach>
这里用items
属性来指定要循环的集合。
另外,我们也可以在这里指定begin
和end
和step
属性,来指定输出哪些对象。
(3)迭代一个HashMap
假设我们上面的User都是放在HashMap中的,如下:
<%
Map<String,User> map = new HashMap<String,User>();
User user1 = new User("小明",12);
User user2 = new User("小强",13);
User user3 = new User("小华",14);
map.put("aa", user1);
map.put("bb", user2);
map.put("cc", user3);
request.setAttribute("persons",map);
%>
那么,我们可以通过如下方式迭代:
<c:if test="${empty persons}">
没有人!
</c:if>
<c:forEach items="${persons}" var="person">
key = ${person.key}; value=${person.value.name},${person.value.age}岁
<br>
</c:forEach>
其实,与ArrayList的迭代方式类似,只是,这里通过var.key
返回HashMap中的Key值,通过var.value
返回HashMap中的Value值,Value也可以是一个对象,如本例。
另外,注意EL表达式中empty判断的用法!
1.2 <c:forTokens>
标签
<c:forTokens>
标签可以根据某个分隔符分隔指定字符串。
比如:
<%
request.setAttribute("abc", "12;56;你好;Gavin");
%>
<c:forTokens items="${requestScope.abc}" delims=";" var="temp">
${temp}
</c:forTokens>
另外,这里也可以指定begin
,end
和step
属性。与前述类似。
2.Url相关的标签
Url标签就是和页面导航,重定向,资源获得,参数传递相关的标签。
主要有:
(1)<c:param>
标签,用来给包含或者重定向的页面传递参数
(2)<c:redirect>
标签,重定向至一个新的URL
(3)<c:url>
标签,使用可选的查询参数来创造一个URL
这几个标签的用法都比较简单。