在jsp上的列表中显示嵌套列表的值

时间:2012-10-05 12:54:39

标签: jsp spring-mvc foreach jstl

我正在尝试使用c:forEach syantax在jsp上迭代pojos列表。 现在的问题是列表包含一个嵌套列表,那么我应该如何在jsp上显示该特定值。

这是关于jsp的代码:

<c:forEach items="${capQues.captureQuestionList}" var="captureQuestion" varStatus="status">
  <fieldset name="captureQuestionList[${status.index}].languageId" value="1">
    <legend><c:out value="${captureQuestion.languages}" /></legend>
    <div class="question"><textarea class="textarea" name="captureQuestionList[${status.index}].question" value="question"></textarea></div>
  </fieldset>
</c:forEach>

其中语言也是captureQuestionList内的列表。

提前致谢

1 个答案:

答案 0 :(得分:2)

我认为你在这里缺少的是var。在您的第一个循环captureQuestion中,将是来自列表captureQuestionList的当前对象。您可以按原样使用该引用,因此您无需使用captureQuestionList[${status.index}]来获取该对象。顺便说一下,正确的语法是${captureQuestionList[status.index]}。因此,您的字段集名称可以是${captureQuestion.languageId}

For循环可以嵌套。例如(对您的问题对象做出一些假设):

<c:forEach items="${capQues.captureQuestionList}" var="captureQuestion">
  <fieldset name="${captureQuestion.languageId}">
      <legend><c:out value="${captureQuestion.languages}" /></legend>
      <c:forEach items="${captureQuestion.questionList}" var="question">
        <div class="question">
          <textarea class="textarea" name="${question.id}"><c:out
            value="${question.value}"/></textarea>
        </div>
      </c:forEach>
  </fieldset>
</c:forEach>

请注意,textarea没有value属性。把价值放在它的身体里。


编辑:如果您需要迭代语言列表,您可以使用相同的原则:

<c:forEach items="${capQues.captureQuestionList}" var="captureQuestion">
  <fieldset name="${captureQuestion.languageId}">
      <legend>
        <c:forEach items="${captureQuestion.languages}" var="language">
          <c:out value="${language.name}" />
        </c:forEach>
      </legend>
      <div class="question">
        <textarea class="textarea" name="${captureQuestion.question}"></textarea>
      </div>
  </fieldset>
</c:forEach>

如果要显示单一语言,请添加c:if以检查语言

<c:forEach items="${captureQuestion.languages}" var="language">
  <c:if test="${language.id eq captureQuestion.questionId}">
    <c:out value="${language.name}" />
  <c:if>
</c:forEach>

虽然最好只在模型中添加对正确语言的引用,这样您就可以使用${captureQuestion.language}