Spring 使用 Thymeleaf 启动 th:object 使用具有现有值的对象而不覆盖它们

Spring boot with Thymeleaf th:object use an object with existing values without overriding them

我正在尝试将我的实体 class User 用作表单对象。

@Entity
@Table(name = "users")
public class User implements Serializable {

    @Column(unique = true, nullable = false)
    @Id
    private int id;

    @Column(name = "username")
    private String username;

    @Column(name = "created_at", nullable = false)
    private Timestamp createdAt;

    // Other variables, getters and setters...
}

观点:

<form th:action="@{/users/{id}/save(id=${user.id})}" th:method="POST" th:object="${user}">
<label for="username">Vartotojo vardas</label>
<input type="text" id="username" name="username" th:value="${user.username}" th:field="*{username}"/>
<button type="submit" class="btn btn-success" th:text="Saugoti"></button>
</form>

现在,当我显示包含该表单的页面时,我传递了一个名为 "user" 的对象以在 th:value 中使用。

我想实现什么?用户包含一个名为createdAt的字段提交表单后它变为空,即使它之前不是空的(我打印出来在我看来之前的表格确认)。我希望表单不更改我不告诉它更改的值。

一个简单的解决方案是将 createdAt 字段作为隐藏字段添加到您的表单中,并填充其值。

也许更好的解决方案是使用一个数据传输对象,该对象仅包含您要在此特定表单中更新的字段。这样您就可以确定要更新的字段将得到更新,而您想要保留的字段将单独保留。