根据学校代码,我有一系列课程。此课程列表将添加到另一个列表中,使其成为列表列表。
行动类:
private List<String> schoolList;
private List<String> socList;
private List<String> sobList;
private List<String> sodList;
private List<String> genlist;
private List<List<String>> courseList = new ArrayList<List<String>>();
@Override
public String execute() {
FacultyManager fm = new FacultyManager();
schoolList = fm.getColumn("school_description", "school");
genlist = fm.getCoursesBySchoolCode("GEN");
sobList = fm.getCoursesBySchoolCode("SOB");
socList = fm.getCoursesBySchoolCode("SOC");
sodList = fm.getCoursesBySchoolCode("SOD");
courseList.add(genlist);
courseList.add(sobList);
courseList.add(socList);
courseList.add(sodList);
return SUCCESS;
}
JSP:
<c:forEach var="school" items="${schoolList}" varStatus="ctr">
<ul>
<li>${school}
<ul>
<c:forEach var="course" items="${courseList}">
<li>${course}</li>
</c:forEach>
</ul>
</li>
</ul>
</c:forEach>
输出
如何制作输出:
......等等。
答案 0 :(得分:2)
您正在一遍又一遍地迭代所有学校的整个课程列表,从而重复相同的输出,就像多次调用courseList.toString()
方法一样。
您应该迭代当前学校的具体课程列表,这很可能(但在您的问题中没有说明)取决于外部<c:forEach>
的当前迭代索引环。这又在学校列表迭代索引的导出index
变量(从零开始)的ctr
属性中捕获。
因此,您应该迭代courseList
列表的特定列表,具体取决于当前的学校。您可以通过调用courseList.get(ctr.index)
来执行此操作,假设您使用的是EL2.2 +。
这一切都是:
<c:forEach var="school" items="${schoolList}" varStatus="ctr">
<ul>
<li>${school}
<ul>
<c:forEach var="course" items="${courseList.get(ctr.index)}">
<li>${course}</li>
</c:forEach>
</ul>
</li>
</ul>
</c:forEach>
那就是说,List<List<String>>
听起来不是一个好的模特选择。例如,如果您更改广告订单,则会在视图中显示错误的课程。 Map<String, List<String>>
构造更适合您的域模型,因为它可以用于将学校名称明确地映射到课程名称列表。
要认真考虑的另一个选择是对象的使用(最后你在做OOP)。您应该远离普通字符串并移动到对象域。首先,研究以下类层次结构:
public class Course {
//...
private School school;
//...
}
public class School {
//...
private List<Course> courses;
//...
}
答案 1 :(得分:0)
如果您尝试迭代列表中的列表,则可以通过
实现<c:forEach var="school" items="${schoolList}" varStatus="ctr">
<ul>
<li>${school}
<ul>
<c:forEach var="course" items="${school}">
<li>${course}</li>
</c:forEach>
</ul>
</li>
</ul>
</c:forEach>
您需要从传递给jsp的列表中迭代inner
列表。
更新
如果您使用的是Map<String, List<String>>
,则可以将其作为
<c:forEach var="school" items="${schoolList}" varStatus="ctr">
<ul>
<li>${school.key}
<ul>
<c:forEach var="course" items="${school.value}">
<li>${course}</li>
</c:forEach>
</ul>
</li>
</ul>
</c:forEach>
您可以使用key
和value
来获取Map