如果表单输入未明确使用它,如何设置 Spring Form 和 Thymeleaf 不更改添加为模型属性的对象的字段?

How to set up Spring Form and Thymeleaf to not changing the fields of object added as model attribute if the form inputs not explicitly use it?

如果我有 DTO 对象,在控制器中添加为属性模型。它有两个业务文件,比如

public class Owner {
    private Long id;

    private String firstName;
    private String secondName;
}

在某些 spring 表单中,我只想更改名字,但仍然使用所有者作为 DTO,而此表单根本没有输入第二个名字。例如,出于隐私原因,我也不想将第二个名字作为隐藏输入放在表单中,所以我只有处理表单中名字的唯一输入?有没有一种方法可以将 DTO 放置到具有名字和名字的模型中,并且在 @PostMapping 控制器方法中仍然在该方法的 @ModelAttribute 参数对象中同时获得名字和名字?在这种情况下,我得到的第二个名字为空。

如果模型是通过 addAttribute("owner", owner)、@SessionAttribute("owner") 注释添加到模型属性的 @Controller-marked class 以及使用 @控制器方法参数中的 ModelAttribute("owner") ownet 是有帮助的决定。使用@SessionAttribute,数据不会被表单清除,所有字段都设置为空值。

@ModelAttribute("named_via_here") 的显式命名需要与@SessionAttribute("named_via_here") 相同(没有它可能会工作,但不能保证)