2011-06-02 62 views
3

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

@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) 
{ 
    ... 
} 

这里,春天不会新兴起来的SomeBean的实例,并尝试将数据绑定到它从发布的数据, 对?没有必要像第一个代码片段中所示的方法?请你确认一下,或者给我提供你的想法?如果我只是继续前进并删除所有这些除了新建空白bean之外什么都不做的方法,我是否会冒风险?

+1

是否有可能当前代码的工作方式是在早期版本的spring 2.5.6中正确建立的,现在使用spring 3.0.5还有更简洁的新方法一样的东西?在这种情况下,我可以想到很多例子,但在这个特例中我并不积极。 – Kevin 2011-06-02 14:08:43

+0

是的,其实很可能。我在其他各个领域也看到很多旧的做法。很可能这种代码在Spring的早期版本中是必需的...... – 2011-06-02 17:13:27

回答

2

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

+0

我终于找到了答案。我想我现在明白了为什么我们要做我们所做的 - 我也看了一下spring mvc源代码。 – 2011-06-29 11:07:45