如何使用 JSTL 打印嵌套对象?

Posted

技术标签:

【中文标题】如何使用 JSTL 打印嵌套对象?【英文标题】:How to print nested objects using JSTL? 【发布时间】:2012-09-11 09:17:39 【问题描述】:

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

<c:foreach items="$survey" var="survey">
    <c:out value="$survey.value" />
</c:foreach>

Survey 有一个名为Questions 的属性,它是另一个bean,我想打印这些问题survey.questions.getId()survey.questions.getTitle()),那&lt;c:forEach&gt; 语句会是什么样子?

就我而言,$surveyMap 而不是 Collection

【问题讨论】:

【参考方案1】:

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

<c:forEach var="surveyItem" items="$surveys">
    $surveyItem.title <!-- You can use the c:out if you really want to -->
</c:forEach>

假设您有一个绑定到surveys 属性的Survey 对象集合,并且每个Survey 都有一个标题。它将打印每个调查的标题。

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

<c:forEach var="question" items="$survey.questions">
    $question.title 
</c:forEach>

这将打印每个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>

这将打印每个Survey 的标题以及每个Survey 中每个Question 的标题。

如果出于某种原因您决定传递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>

【讨论】:

如果调查是地图,请问这将如何改变?【参考方案2】:

如果您的 Survey.Question 是另一个集合对象,则基本上您需要在循环中迭代两次。例如,

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

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

    <c:foreach items="$survey.Question" var="question">
      $<c:question.item> or $<c:question.title>
     </c:foreach>
</c:foreach>

【讨论】:

以上是关于如何使用 JSTL 打印嵌套对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何按名称过滤键,然后使用 jq 访问嵌套对象

JSTL 中c:forEach 嵌套c:if

如何使用JSTL从JSON字符串输出值?

如何通过 React 中的嵌套对象数组进行映射

如何漂亮地打印嵌套字典?

如何使用嵌套循环打印出X.