问题是我有一个弹簧形式和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;
}
我哪里错了?
答案 0 :(得分:3)
如果我理解你正确,你想阻止在model2
设置任何属性,对吧?
那应该这样做:
@InitBinder("model2")
public void initBinder(WebDataBinder binder) {
binder.setDisallowedFields("*");
}