JSTL用 <c:forEach> 遍历对象集合,而对象内含有集合属性
通过jstl遍历一个自定义的实体类集合,而这个实体类的属性中还有一个集合属性。
比如以下的例子:
有多个学生,每个学生都有多个盆友
// 学生类
public class Student{
private Integer sid;
private String sname;
private List<Friend> friendList;
}
// 盆友类
public class Friend{
private Integer fid;
private String fname;
}
在jsp页面中,通过jstl展示学生列表和每个学生的盆友列表
解决
前提
// 前提:引入jstl标签
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
写法一
后端代码
①获取所有的学生集合StudentList,只要学生的id和name即可。
②获取所有的盆友集合FriendList,只要盆友的id和name即可。
③将以上的2个集合设置到session中。
前端代码
// 前提:引入jstl标签
<c:forEach items="${StudentList}" var="student">
<span>学生 <span style="color: red">${student.name }</span> 的盆友:</span>
<br />
<c:forEach items="${FriendList}" var="friend">
<c:if test="${student.id == friend.moduleId}">
<span><span style="color: green">${friend.name }</span></span>
<br />
</c:if>
</c:forEach>
<hr/>
</c:forEach>
效果如下:
后端代码
①获取所有的学生集合StudentList,并且设置好每个学生的friendList属性 。
③将以上的StudentList集合设置到session中。
前端代码
<c:forEach items="${StudentList}" var="student" varStatus="student_vs">
<tr>
<td>${student.name}</td>
<br>
<c:set value="${student.friendList}" var="friend_data"/>
<c:forEach items="#{friend_data}" var="friend">
<td>${friend.name}</td>
</c:forEach>
<td>${student.id}</td>
<td>${student_vs.index+1}</td>
</tr>
<hr style="border:1px dotted #000000" />
</c:forEach>
写法三
后端代码
①获取所有的学生集合StudentList,并且设置好每个学生的friendList属性 。
③将以上的StudentList集合设置到session中。
前端代码
<c:forEach items="${StudentList}" var="student" varStatus="student_vs">
<tr>
<td>${student.name}</td>
<br>
<c:forEach items="#{student.friendList}" var="friend">
<td>${friend.name}</td>
</c:forEach>
</tr>
<hr style="border:1px dotted #000000" />
</c:forEach>