【发布时间】:2015-10-03 06:24:15
【问题描述】:
我使用带有 JSP 的 Struts2 框架。我想在 JSP 中嵌套 foreach 标记,但在内部 foreach 标记处出现错误。
迭代嵌套对象时出错。
<c:forEach var="emp" items="${dept.emplyees}">
例外:
Caused by: javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in <forEach>
at org.apache.taglibs.standard.tag.common.core.ForEachSupport.toForEachIterator(ForEachSupport.java:274) ~[jstl-1.2.jar:1.2]
at org.apache.taglibs.standard.tag.common.core.ForEachSupport.supportedTypeForEachIterator(ForEachSupport.java:238) ~[jstl-1.2.jar:1.2]
at org.apache.taglibs.standard.tag.common.core.ForEachSupport.prepare(ForEachSupport.java:155) ~[jstl-1.2.jar:1.2]
at javax.servlet.jsp.jstl.core.LoopTagSupport.doStartTag(LoopTagSupport.java:291) ~[javax.servlet.jsp.jstl-api-1.2.1.jar:1.2.1]
at org.apache.jsp.views.Home.home_jsp._jspx_meth_c_005fforEach_005f1(home_jsp.java:364) ~[na:na]
at org.apache.jsp.views.Home.home_jsp._jspService(home_jsp.java:159) ~[na:na]
下面是我使用 POJO 和 Struts Action feilds 的示例代码。
JSP 代码:
<c:forEach var="dept" items="${deptList}">
<c:out value="${dept.deptname}"/>
<c:forEach var="emp" items="${dept.emplyees}">
<c:out value="${emp.name}"/>
</c:forEach>
</c:forEach>
动作类:testAction:
class TestAction{
List<Department> deptList
public List<Department> getDeptList() {
return deptList;
}
public void setDeptList(List<Department> deptList) {
this.deptList = deptList;
}
}
DeprtmentPOJO:
class Department{
private String deptname
List<Employee> emplyees;
public List<Employee> getDeptList() {
return emplyees;
}
public void setDeptList(List<Employee> emplyees) {
this.emplyees = emplyees;
}
}
EmployeePOJO:
class Employee{
private String name;
}
【问题讨论】:
-
你在 Deprtment Pojo 中有错误的 getter 和 setter。也许在这里发布它们只是一个复制错误,但就是这样。另外我强烈建议您避免随意丢弃字母,这只会给您带来麻烦。为了您自己的安全,将员工变成员工。最后,有什么理由不使用 s:iterator 而不是 forEach ?
标签: java jsp struts2 jstl jsp-tags