为什么@ModelAttribute没有保留我的ID?为什么我必须将其作为隐藏参数发送到我的表单中?使用命令时不应该弹簧处理吗?
@RequestMapping(value="/{supplierId}", method=RequestMethod.GET)
public String get(@PathVariable Long supplierId, Model model, Principal principal){
Form form = .... //Got a an existing form from DB
model.addAttribute("form", form);
return "/form";
}
@RequestMapping(value="/{supplierId}", method=RequestMethod.POST)
public String post(HttpServletRequest request, @PathVariable Long supplierId, @Valid @ModelAttribute("form") Form form, BindingResult result, Model model, Principal principal){
System.out.println(form.getID()); //Here the id is 0
safeFoodFormService.store(form, supplierId);
return "redirect:/supplier";
}
我的Freemarker表格
<form class="form-horizontal" action="<@spring.url "/forms/${supplier.ID?c}"/>" method="post" command="form">
如果我在表单中添加这些行
,它将起作用<@spring.bind "form.ID" />
<input type="hidden" name="${spring.status.expression}" value="${spring.status.value default("")}" />
如果可以由Spring处理,我会很高兴。感谢
答案 0 :(得分:1)
Spring数据绑定接受请求名称/值对,并将具有相同名称的相应属性绑定到相应的值。因此,如果请求中不存在id请求参数,则spring mvc无法在模型bean中映射其值,该值将被注入到控制器方法中。因此,通过任何机制,表单必须有一个输入(隐藏或其他),让spring将其值绑定到bean属性。