给出一个看起来像这样的类:
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
绑定的发送值,而不提交呈现的模型属性中的所有内容?
答案 0 :(得分:1)
更正,提交仅绑定与th:field
绑定的那些变量。最简单的解决方案是将@SessionAttributes("foo")
添加到您的控制器中:
@Controller
@SessionAttributes("foo")
public class FooController {
这样,仍未在模型对象中设置POST
ed属性。