从嵌套<c:foreach>转换为<display:table> </display:table> </c:foreach>

时间:2014-07-21 07:15:13

标签: jsp displaytag

我有以下代码要转换为&lt; display:table>,但我不知道如何显示第二个<c:/forEach>的内容。 基本上,我的表格显示了与他们相关的学生和注册。每个学生都包含一个注册列表。每一对学生和一个注册应该以新的一行显示。

我尝试了一些事情,但结果并不是我的预期。任何想法都将不胜感激。

我的原始代码:

<c:forEach var="student" items="${students}">
                        <c:if test="${not empty student.enrolments}">
                            <c:forEach var="enrolment" items="${student.enrolments}">
                                <tr class="even_row">

                                    <td class="detail_l">${student.familyName}</td>
                                    <td class="detail_l">${student.firstName}</td>
                                    <td class="detail_l"><fmt:formatDate
                                        value="${student.dateOfBirth}" pattern="dd-MM-yyyy" /></td>
                                    <td class="detail_l">${student.sexCode}</td>
                                    <td class="detail_l">
                                    <a href="javascript:goToMenuOption('sisStudentUnits');">${student.studentNo}</a>
                                    </td>
                                    <td class="detail_l">${enrolment.courseNo}</td>
                                    <td class="detail_l">${enrolment.enrolmentInstitution.instNo}</td>
                                    <td class="detail_l">${enrolment.firstEnrolmentYear}</td>
                                    <td class="detail_l">${enrolment.studentEnrolmentCode}</td>
                                </tr>
                            </c:forEach>
                        </c:if>
                    </c:forEach>

我的转换,即无效(从注册开始的转换将导致jsp文件出错。例如:查找属性时出错&#34; enrolment.courseNo&#34;):

<display:table name="students">
                <display:column property="familyName" title="Surname" />
                       <display:column property="firstName" title="First Name" />
                       <display:column property="dateOfBirth" title="Date of Birth" />
                       <display:column property="sexCode" title="Sex" />
                       <display:column property="studentNo" title="Student Number" />
                       <display:column property="enrolment.courseNo" title="Course No (V/A)" />
                       <display:column property="enrolment.enrolmentInstitution.instNo" title="College/Centre"/>
                       <!display:column property="enrolment.firstEnrolmentYear" title="Year"/>
                       <!display:column property="enrolment.studentEnrolmentCode" title="Enr. Status"/>                  
                </display:table>

提前谢谢你,

泰国人

1 个答案:

答案 0 :(得分:0)

编辑:请参阅此答案的底部以获取更新的答案...

从forEach示例中我们可以看到forEach正在循环:

$ {student.enrolments}(复数)

并动态创建一个名为“enrollment”(单数)的变量作为临时变量来访问当前行的属性。

但是display:column example的属性属性引用了不存在的“enrollment”(单数)。

您可能希望在此处创建表格(即嵌套表格)。请参阅此示例,并确保查看右上角的“查看源代码”按钮,以了解嵌套表的工作方式:

http://demo.displaytag.org/displaytag-examples-1.1/example-nestedtables.jsp


继续......基于想要包含子列表的平面列表,我相信你需要做这样的事情:

<display:table name="students" id="student">
   <c:forEach items="${student.enrolments}" var="enrolment">
        <display:column property="familyName" title="Surname" />
        <display:column property="firstName" title="First Name" />
        <display:column property="dateOfBirth" title="Date of Birth" />
        <display:column property="sexCode" title="Sex" />
        <display:column property="studentNo" title="Student Number" />
        <display:column title="Course No (V/A)">
            ${enrolment.courseNo}
        </display:column>
        <display:column title="College/Centre">
            ${enrolment.enrolmentInstitution.instNo}
        </display:column>
       ...
   </c:forEach>
</display:table>