【问题标题】:Thymeleaf submit ignores list of objectsThymeleaf 提交忽略对象列表
【发布时间】:2018-08-16 13:53:24
【问题描述】:

给定一个看起来像这样的类:

public class Foo {
    private List<Bar> bars = new ArrayList<>();

    //getter and setter
}

使用空列表初始化,或者添加值然后附加到控制器中的弹簧模型,如下所示:

@RequestMapping(value = "add")
public String add(Model model) {
    model.addAttribute("foo", new Foo());        
    return "foos/add";
}

当相同的模型属性被提交回另一个控制器方法时,如下所示:

@RequestMapping(value = "add", params = {"addBar"})
public String addBar(@ModelAttribute("foo") Foo foo) {
    // Here foo.getBars() is always null....
    // all other properties are correctly initialized
    return "foos/add";
}

栏集合始终为空。除了始终为 null 的集合之外,其他所有属性都具有正确的值。

我验证了模型在渲染时有它的集合:

<div>
    <p>DEBUG</p>
    <pre data-th-text="${foo.bars}" />
</div>

当我创建一个空的Foo 实例或用一些Bars 预填充该实例时,它会打印[],我会看到类似于[Bar@1234] 的内容。

目前在 html 本身中 Bars 未绑定到任何地方,因此不会影响它们。

我做错了什么?提交是否只发送与th:field 绑定的值,而不是渲染模型属性中的所有内容?

【问题讨论】:

    标签: spring spring-mvc thymeleaf


    【解决方案1】:

    正确,提交只绑定那些与th:field 绑定的变量。最简单的解决方案是将@SessionAttributes("foo") 添加到您的控制器中:

    @Controller
    @SessionAttributes("foo")
    public class FooController {
    

    这样,不是POSTed 的属性仍会设置在您的模型对象中。

    【讨论】:

      猜你喜欢
      • 2019-11-28
      • 2023-01-01
      • 1970-01-01
      • 2020-12-04
      • 2018-05-11
      • 2016-02-17
      • 2015-12-12
      • 2011-12-18
      • 2017-11-18
      相关资源
      最近更新 更多