[英]Cannot pass list of objects to controller
我有两个实体与
@Entity
public class Foo {
@Id
@GeneratedValue
private Integer id;
private String name;
@OneToMany(mappedBy = "foo")
private List<Bar> bars;
// *******************\\
}
和
@Entity
public class Bar{
@Id
@GeneratedValue
private Integer id;
private String title;
@ManyToOne
@JoinColumn(name = "foo_id")
private Foo foo;
// *******************\\
}
我得到以添加新foo的形式显示的酒吧列表
@RequestMapping(value = "/add-foo", method = RequestMethod.GET)
public String fooForm(Model model) {
model.addAttribute("bars", barService.findAll());
return "add-foo";
}
形式是
<form:form commandName="foo">
<form:input path="name"/><br>
<form:select path="bars" multiple="multiple">
<c:forEach items="${bars}" var="bar">
<form:option value="${bar.id}">${bar.title}</form:option>
</c:forEach>
</form:select><br>
<input type="submit" value="Add Foo with selected Bars">
</form:form>
在这里我看到所有使用
<c:forEach items="${bars}" var="bar">
<form:option value="${bar.id}">${bar.title}</form:option>
</c:forEach>
但是当我提交表单时,使用控制器中的方法
@RequestMapping(value = "/add-foo", method = RequestMethod.POST)
public String addFoo(@ModelAttribute("foo") Foo foo) {
List<Bar> bars = foo.getBars();
for (Bar bar : bars ) {
logger.info("DEBUG Foo object", bar);
}
return "redirect:/foos-list";
}
似乎没有向服务器发送数据并说出错误客户端发送的请求在语法上是不正确的 。
将绑定输入表单字段与Business Domain model Object
绑定,请确保正确执行了数据绑定。 因此,在@ModelAttribute之后使用BindingResult
。 因此,您可以轻松识别表单字段是否绑定了业务对象。
@RequestMapping(value = "/add-foo", method = RequestMethod.POST)
public String addFoo(@ModelAttribute("foo") Foo foo, BindingResult result) {
if (!result.hasErrors()){
List<Bar> bars = foo.getBars();
for (Bar bar : bars ) {
logger.info("DEBUG Foo object", bar);
}
} else
System.out.println("Binding result error");
return "redirect:/foos-list";
}
然后您再次重定向到“ / foos-list”到您的Controller中。 您的帖子中没有此类RequestMapping
。 所以像这样重定向到适当的RequestMapping
,
@RequestMapping(value = "/foos-list", method = RequestMethod.GET)
public String fooForm(Model model) {
model.addAttribute("bars", barService.findAll());
return "add-foo";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.