我正在尝试使用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
内的列表。
提前致谢
答案 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}
。