Thymeleaf Submit忽略对象列表

时间:2018-08-16 13:53:24

标签: spring spring-mvc thymeleaf

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

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

    //getter and setter
}

初始化为空列表,或者添加值,然后将其附加到控制器中的spring模型,如下所示:

@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";
}

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

我通过以下方式渲染时验证了模型是否具有集合:

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

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

当前在html本身中,Bar未绑定在任何地方,因此没有任何影响。

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

1 个答案:

答案 0 :(得分:1)

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

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

这样,仍未在模型对象中设置POST ed属性。