Thymeleaf,Spring嵌套后备对象不绑定表单提交上的值

时间:2015-05-16 19:55:19

标签: spring object binding nested thymeleaf

我有一个嵌套对象,我将它用作表单的模型。

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>

但是,当我在表单中进行更改并提交时,模型保持不变。我通过调试接收表单数据的服务来确认这一点。该模型没有在表单中进行更改。我在这里做错了吗?

1 个答案:

答案 0 :(得分:1)

我很尴尬地说我找到了解决方案。由于缺少名称,这些值根本没有发布到网络流程中。每个输入中的属性。使用相同的动态生成的ID作为名称完成了作业,并且绑定对于列表的每个项目都是正确的。像这样:

<input th:id="'fromAge_'+${bracket.id}" th:name="'fromAge_'+${bracket.id}" th:field="*{ageBrackets[__${loop.index}__].fromAge}" />

感谢所有花时间阅读这篇愚蠢帖子的人。我下次会更加小心;)