Forms 带Thymeleaf th:object的Spring引导使用具有现有值的对象,而不重写它们

Forms 带Thymeleaf th:object的Spring引导使用具有现有值的对象,而不重写它们,forms,spring-boot,thymeleaf,Forms,Spring Boot,Thymeleaf,我正在尝试使用实体类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 =

我正在尝试使用实体类
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字段作为隐藏字段添加到表单中,并填充其值


也许更好的解决方案是使用一个数据传输对象,该对象只包含要在此特定表单中更新的字段。通过这种方式,您可以确保要更新的字段将被更新,而要保留的字段将被单独更新。

在这种情况下,使用对象没有多大意义。。。我可以为我的控制器中的每个字段添加@RequestParam。使用DTO对象仍然允许您在表单Fieldsure上使用基于注释的验证,但最终我不会赢得太多,因为我必须将数据从该DTO传输到我的实体。是的,但是,您可以通过将其他用户字段包含在表单post中来确保它们都不能更改。