JSTL打印嵌套对象

Rob*_*ert 1 java jsp jstl map

如何在JSP页面上的地图中打印嵌套对象/属性的值?

<c:foreach items="${survey}" var="survey">

    <c:out value="${survey.value}" />

</c:foreach>
Run Code Online (Sandbox Code Playgroud)

那么让我们说Survey有一个名为Questions的属性(这是另一个对象),我想打印那些问题(survey.questions.getId()或survey.questions.getTitle()),那个foreach语句看起来怎么样?

编辑:调查是一个地图,而不是一个集合

aro*_*oth 5

如果您的嵌套属性是单个对象实例,则只需直接引用它,如:

<c:forEach var="surveyItem" items="${surveys}">
    ${surveyItem.title} <!-- You can use the c:out if you really want to -->
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

这假定您有一组Survey绑定到该surveys属性的对象,并且每个对象Survey都有一个标题.它将打印每个调查的标题.

如果您的嵌套属性是对象的集合,那么您使用forEach循环来迭代它们,就像在您的示例中一样.

<c:forEach var="question" items="${survey.questions}">
    ${question.title} 
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

这将打印每个标题Question,假设您有一个Survey绑定到该survey属性的Survey对象,并且该对象具有一个对象集合Question作为字段(使用适当的getter方法,即getQuestions()).

您还可以使用嵌套循环,例如:

<c:forEach var="surveyItem" items="${surveys}">
    ${surveyItem.title}
    <c:forEach var="question" items="${surveyItem.questions}">
        ${question.title} 
    </c:forEach>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

这将打印的每一个标题Survey,每个标题一起Question在每个Survey.

如果由于某种原因你决定通过Map,你可以这样做:

<c:forEach var="entry" items="${surveyMap}">
    Map Key:  ${entry.key}
    Map Value:  ${entry.value}
    Nested Property:  ${entry.value.title}
    Nested Collection:
    <c:forEach var="question" items="${entry.value.questions}">
        ${question.title}
    </c:forEach>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)