2012-09-19 89 views
1

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

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

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

</c:foreach> 

所以我们可以说调查有一个属性叫做问题(这是另一个对象),我想打印这些问题(survey.questions.getId()或survey.questions.getTitle()),如何将这项foreach语句看起来如何?

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

+1

请更改您的问题。 “调查”是列表,地图吗? – adatapost

回答

5

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

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

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

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

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

,将打印的每个Question的标题,假设你有绑定到survey属性单个Survey对象,并且该Survey对象具有Question对象作为一个字段的集合(与合适的吸气剂的方法,即getQuestions())。

你也可以有嵌套的循环,如:

<c:forEach var="surveyItem" items="${surveys}"> 
    ${surveyItem.title} 
    <c:forEach var="question" items="${surveyItem.questions}"> 
     ${question.title} 
    </c:forEach> 
</c:forEach> 

,将与各Question在每个Survey标题一起打印每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> 
+0

如果调查是一张地图,你可以改变这种情况吗? – Robert

+0

@Robert - 是的,已更新。 – aroth

+0

非常感谢 – Robert

0

基本上你需要在循环迭代两次,如果你的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>