问题是我在控制器中有一个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("*");
}