【问题标题】:How to print nested objects using JSTL?如何使用 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; 语句会是什么样子?

就我而言,${survey}Map 而不是 Collection

【问题讨论】:

    标签: jsp jstl nested-object


    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 2020-11-15
      • 2013-01-20
      • 1970-01-01
      • 2021-06-25
      • 1970-01-01
      • 2021-03-07
      • 2013-01-27
      • 2016-03-13
      • 2020-07-04
      相关资源
      最近更新 更多