You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot Thymeleaf多表单渲染与单对象提交问题求助

问题分析

当前提交表单时SimpleFormData.editedSyncedField为空,核心原因是请求参数的命名未匹配Spring MVC的属性绑定规则:表单输入框的name直接使用了id和jiraField.id,但Spring MVC需要将参数绑定到SimpleFormData的editedSyncedField属性下,因此参数名必须带上editedSyncedField.前缀。

解决方案

修改Thymeleaf模板的表单输入框name属性,同时简化取值逻辑(直接使用循环中的syncedField对象,无需通过列表索引):

<body>
<div th:each="syncedField : ${simpleFormData.syncedFields}">
    <form th:action="@{/simpleedit}" method="post">
        <pre th:text="'syncedField id = ' + ${syncedField.id}"></pre>
        <pre th:text="'jiraField id = ' + ${syncedField.jiraField.id}"></pre>
        <!-- 绑定到SimpleFormData.editedSyncedField.id -->
        <input th:value="${syncedField.id}"
               th:name="editedSyncedField.id"
               th:id="editedSyncedField-id-${syncedField.id}"
        >
        <!-- 绑定到SimpleFormData.editedSyncedField.jiraField.id -->
        <input th:value="${syncedField.jiraField.id}"
               th:name="editedSyncedField.jiraField.id"
               th:id="editedSyncedField-jiraField-id-${syncedField.id}"
        >
        <input type="submit" value="Edit"/> <input type="reset" value="Reset">
    </form>
</div>
</body>
关键说明
  • 参数命名规则:Spring MVC通过参数名匹配对象属性,要绑定SimpleFormData.editedSyncedField.id,参数名必须是editedSyncedField.id,嵌套属性用.分隔。
  • 移除冗余的th:object:每个表单提交的是单个对象到editedSyncedField,直接通过name属性指定绑定路径更清晰,无需绑定到${simpleFormData.editedSyncedField}(渲染时该对象为同一个空实例,无法区分不同表单的目标数据)。
  • 唯一ID优化:给每个输入框设置唯一id(例如追加syncedField.id后缀),避免多个表单的输入框ID重复,符合HTML规范。
验证

提交表单后查看控制器日志receivedFormData,此时simpleFormData.editedSyncedField应包含对应表单的id和jiraField.id值。

内容的提问来源于stack exchange,提问作者Ignat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:20:18