JSTL用 <c:forEach> 遍历对象集合,而对象内含有集合属性

tech2026-03-09  2

目录

问题解决前提写法一后端代码前端代码 写法二后端代码前端代码 写法三后端代码前端代码

问题

通过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}"> &nbsp;&nbsp;&nbsp;&nbsp; <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>&nbsp;&nbsp; </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>&nbsp;&nbsp; </c:forEach> </tr> <hr style="border:1px dotted #000000" /> </c:forEach>
最新回复(0)