簡體   English   中英

如何在 JSP 中使用嵌套的 foreach 標簽

[英]How to use nested foreach tag in JSP

我在 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 &lt;forEach&gt;
    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字段的示例代碼。

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;
    }
}

Deprtment POJO:

class Department{

private String deptname

List<Employee> emplyees;

    public List<Employee> getDeptList() {
        return emplyees;
    }

    public void setDeptList(List<Employee> emplyees) {
        this.emplyees = emplyees;
    }
}

Employee POJO:

class Employee{
    private String name;
}

要迭代對象的屬性,它應該不為null並且有一個 getter 方法。

private List<Employee> emplyees = new ArrayList<>();
public List<Employee> getEmplyees() { return emplyees; }  

在頁面上顯示此屬性之前,最好有一些值。 您可以在操作中執行此操作,或者在prepare()更好地執行此操作,並讓您的操作實現Preparable interface

通常用於填充表單控件的數據是動態生成的,可能來自數據庫。 當用戶提交表單時,Struts 2 驗證攔截器會嘗試驗證用戶的表單輸入。 如果驗證失敗,Struts 2 框架將返回值"input"但不會重新執行"input"操作。 而是將與"input"結果相關聯的視圖呈現給用戶。 通常這個視圖是顯示原始表單的頁面。

如果顯示的一個或多個表單字段或某些其他數據依賴於在Action類的輸入方法中完成的動態查找,則此工作流程可能會導致問題。 由於Action類的輸入法在驗證失敗時不會重新執行,因此視圖頁面可能無法再訪問正確的信息來創建表單或其他顯示信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM