Document

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

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}">
            &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>
posted @ 2021-05-22 23:58  李宗光  阅读(910)  评论(0编辑  收藏  举报