我们正在开发基于Spring 3.0.5 Web MVC的应用程序。在我们的代码中,我们经常做这样的事情:
@ModelAttribute(ModelKeys.SOME_BEAN)
public SomeBean newSomeBean() {
return new SomeBean();
}
我认为这不是必要的。但如果它真的没有,那么我想知道这是如何通过如此多的代码审查?根据我的理解,如果控制器方法需要一个新的SomeBean,那么用@ModelAttribute注释该方法中的参数应该足够了吗?然后,Spring将使用默认构造函数来新增所需的bean以调用控制器方法,例如:
@RequestMapping(method = RequestMethod.POST)
public String doIt(
@ModelAttribute(ModelKeys.SOME_BEAN) final SomeBean bean,
final BindingResult bindingResult)
{
...
}
这里,Spring将新建一个SomeBean实例并尝试从POSTed数据中绑定到它,对吗?没有必要使用第一个代码片段中显示的方法吗?请您确认一下,或者告诉我您对此的看法?如果我继续前进并删除所有这些除了新空豆之外什么都不做的方法,我会引入风险吗?
答案 0 :(得分:2)
@ModelAttribute
注释不会将bean属性与HTTP请求参数绑定。这是与方法参数上相同注释的关键区别。这种方法对于填充一些不依赖于模型中的请求参数的数据是有用的,例如,从字典中获取的组合框的值。如果在控制器中有多个处理程序方法,例如,这将特别有用。查看/更改/删除相同类型的对象,并且在所有对象中都需要相同的模型属性集。