我在使用JSP视图时遇到问题。我打算做的是发送一个包含问题的列表,每个问题对象都是一个文本字段和一个包含备选方案的列表。
我的目的是能够编辑多个问题(两者都可以编辑问题的文本/名称并编辑包含的替代品)。
我的支持对象现在正在发送一个列表问题。
这是我的JSP失败的bean类的无效属性。
<form:form commandName="question">
<form:errors path="*">
<fieldset class="stdframe">
<legend>Question</legend>
</fieldset>
</form:errors>
<div class="stdframe">
<c:forEach var="q" items = "${question}" varStatus = "s">
<p><b>Question:</b></p>
<p><form:input size="67" path="${q.text}"/></p>
<br/>
${q.text}
<ul>
<c:forEach var="alternative" items = "${q.alternatives}" varStatus = "t">
${alternative.text}
<li><form:input path = "${alternative[$t.index].text}" /></li>
</c:forEach>
</ul>
<br/>
</c:forEach>
<input type="submit" class="submit" value="Save" />
<input type="button" class="button" onClick="back()" value="Back"/>
</div>
</form:form>
我尝试了${q.text}
和${q[$s.index].text}
。当我打印${q.text}
时,它会显示问题对象的正确文本。同样可以替代。
如何正确地将表单绑定到对象?
另外,当我存储包含其他对象列表的对象时,列表是否会自己存储在数据库中?
答案 0 :(得分:2)
您可能需要将List包装在一个简单的对象中,并将List作为字段:
class MyListWrapper { List questions; } // etc.
如果你使用它作为你的命令/表单对象,你应该能够在JSP中做这样的事情:
<form:form commandName="wrapper">
// ...
<c:forEach var="q" items = "${wrapper.questions}" varStatus = "s">
<p><b>Question:</b></p>
<p><form:input size="67" path="questions[${s.index}].text"/></p>
// ...
<c:forEach var="alternative" items = "${q.alternatives}" varStatus = "t">
${alternative.text}
<li><form:input path = "questions[${s.index}].alternatives[${t.index}].text" /></li>