具有相同属性名的多个模型属性的弹簧表单路径



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

我还没有找到确切的解决方案,除了类似于我的:Spring-form多个表单具有相同的模型属性名称属性

但是在我的情况下,我看不到任何"奇怪的事情",我有一个表单,一个模型属性绑定这个表单,一个模型属性可以访问控制器范围@SessionAttribute。我也试过使用表单的'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;
}

我错在哪里?

如果我理解正确的话,您想要防止在model2上设置任何属性,对吗?那么应该这样做:

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

最新更新