我们正在开发基于Spring 3.0.5 Web MVC的应用程序。在我们的代码中,我们经常这样做:

@ModelAttribute(ModelKeys.SOME_BEAN)
public SomeBean newSomeBean() {
  return new SomeBean();
}

我认为这是没有必要的。但是,如果真的不是,那么我想知道这如何成功地完成了这么多代码审查?以我的理解,如果控制器方法想要一个NEW SomeBean,那么用@ModelAttribute注释该方法中的参数就足够了吗?然后,Spring将使用默认构造函数来创建调用控制器方法所需的bean,例如:
@RequestMapping(method = RequestMethod.POST)
public String doIt(
  @ModelAttribute(ModelKeys.SOME_BEAN) final SomeBean bean,
  final BindingResult bindingResult)
{
  ...
}

在这里,Spring将新建SomeBean的实例,并尝试从POSTed数据将数据绑定到其中,对吗?不需要如第一个代码片段所示的方法吗?请您确认一下或提供您的想法吗?如果我只是继续并删除所有这些除了新建一个空bean之外无能为力的方法,是否会带来风险?

最佳答案

方法上的@ModelAttribute注释不会将bean属性与HTTP请求参数绑定。这是与方法参数上相同注释的主要区别。这种方法对于填充一些不依赖于模型中请求参数的数据很有用,例如,从字典中获取的组合框的值。如果您在控制器中有多个处理程序方法,例如要查看/更改/删除相同类型的对象,并且所有对象都需要相同的模型属性集。

09-27 19:47