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>
