0

为什么我的@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 处理,我会非常好。谢谢

4

1 回答 1

1

Spring 数据绑定采用请求名称/值对,并将具有相同名称的相应属性绑定到相应的值。因此,如果请求中没有 id 请求参数,spring mvc 无法将其值映射到模型 bean 中,该模型 bean 将被注入到控制器方法中。因此,通过任何机制,表单必须有一个输入(隐藏或其他方式)以让弹簧将其值绑定到 bean 属性。

于 2013-10-28T10:31:53.660 回答