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

Posted 9527号码农

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>

以上是关于JSTL用 <c:forEach> 遍历对象集合,而对象内含有集合属性的主要内容,如果未能解决你的问题,请参考以下文章

使用 JSTL <c:forEach> 标签遍历 List 和 Map 的元素

c中foreach的用法

c:forEach中对List的遍历,list每一个对象不是bean,而是String,在JSP中,怎么JSTL循环输出list内容

用<forEach>遍历list集合时,提示我找不到对象的属性

使用 c:foreach (JSP/JSTL) 遍历 ArrayList,变量不起作用

ForEach中中 varStatus的属性简介