我有一个嵌套对象,我将它用作表单的模型。
public AgeBracketSet implements Serializable{
private String id;
private List<AgeBracket> ageBrackets;
/* Getters and Setters */
}
我已经成功地将此对象的所有属性绑定到表单,并且可以在呈现视图状态时可视化它们的值。以下是我与Thymeleaf合作的简化版本。基本上,我循环遍历列表中的项目并获取其属性。
<form id="bracketForm" role="form" th:action="${flowExecutionUrl}" th:object="${ageBracketSet}" method="post">
<input th:id="'bracketSet_'+*{id}" th:field="*{id}" />
<th:block th:each="bracket,loop : *{ageBrackets}" th:id="'bracket_'+${bracket.id}">
<input th:id="'fromAge_'+${bracket.id}" th:field="*{ageBrackets[__${loop.index}__].fromAge}" />
<input th:id="'toAge_'+${bracket.id}" th:field="*{ageBrackets[__${loop.index}__].toAge}" />
</th:block>
</form>
但是,当我在表单中进行更改并提交时,模型保持不变。我通过调试接收表单数据的服务来确认这一点。该模型没有在表单中进行更改。我在这里做错了吗?
答案 0 :(得分:1)
我很尴尬地说我找到了解决方案。由于缺少名称,这些值根本没有发布到网络流程中。每个输入中的属性。使用相同的动态生成的ID作为名称完成了作业,并且绑定对于列表的每个项目都是正确的。像这样:
<input th:id="'fromAge_'+${bracket.id}" th:name="'fromAge_'+${bracket.id}" th:field="*{ageBrackets[__${loop.index}__].fromAge}" />
感谢所有花时间阅读这篇愚蠢帖子的人。我下次会更加小心;)