Spring Web MVC和新兴bean

时间:2011-06-02 12:47:58

标签: java spring spring-mvc javabeans modelattribute

我们正在开发基于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数据中绑定到它,对吗?没有必要使用第一个代码片段中显示的方法吗?请您确认一下,或者告诉我您对此的看法?如果我继续前进并删除所有这些除了新空豆之外什么都不做的方法,我会引入风险吗?

1 个答案:

答案 0 :(得分:2)

方法上的

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