具有多个模型属性的Spring表单路径,具有相同的属性名称

时间:2014-05-08 08:23:56

标签: forms spring spring-mvc

问题是我有一个弹簧形式和2个@ModelAttribute参数,在我的控制器中具有相同的属性。表单的'commandName'参数设置为我的一个modelAttributes名称。我很惊讶,不仅将属性映射到使用'commandName'指定的模型属性,还将映射到第二个。

我没有在这里找到确切的解决方案,除了类似于我的:Spring-form multiple forms with same model atribute name properties

但是在我的情况下,我看不到任何“奇怪的东西”,我有一个表单,一个Model属性来绑定这个表单,一个模型属性要跟控制器作用域@SessionAttribute。 我也尝试使用form的'modelAttribute'参数(实际上我看不出它们之间有什么区别),但它没有帮助。

我的代码示例:

view.jsp的:

<form:form name="form" action="/myAction" method="POST" commandName="model1">
    <form:input path="property"/>
    ....
    <input type="submit" value="Submit"/>
</form:form>

Controller.java

@SessionAttributes("model2")
class Controller {
    @RequestMapping(value = "/myAction", method = POST)
    public String submitEditSite(final @ModelAttribute(value = "model1") Model1 model1,
                                 final @ModelAttribute(value = "model2") Model2 model2) {
        ....
        return "redirect:/home";
    }
}

Model1.java Model2.java

class Model1 {
    private String property;
}
class Model2 {
    private String property;
}

我哪里错了?

1 个答案:

答案 0 :(得分:3)

如果我理解你正确,你想阻止在model2设置任何属性,对吧? 那应该这样做:

  @InitBinder("model2")
  public void initBinder(WebDataBinder binder) {
    binder.setDisallowedFields("*");
  }