【问题标题】:Spring Web MVC and newing up beansSpring Web MVC 和更新 bean
【发布时间】:2011-09-07 01:36:13
【问题描述】:

我们正在开发基于 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 实例并尝试将 POST 数据绑定到其中,对吗?不需要第一个代码sn-p所示的方法吗?请您确认这一点或向我提供您对此的想法吗?如果我继续删除所有这些除了新建一个空 bean 之外什么都不做的方法,我是否会引入风险?

【问题讨论】:

  • 是否有可能当前代码的工作方式在早期版本的 spring 上是正确的,比如 2.5.6,现在有了 spring 3.0.5,有新的,更多简洁的方法,做同样的事情?我能想到很多这样的例子,但我对这个特定的例子并不积极。
  • 是的,事实上很有可能。我在其他各个领域也看到了很多旧的做法。很可能这种代码在早期版本的 Spring 中是必需的......

标签: java spring spring-mvc javabeans modelattribute


【解决方案1】:

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

【讨论】:

  • 我终于明白了这个答案。我想我现在明白我们为什么要做我们所做的了——我还查看了 spring mvc 源代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
  • 2013-11-18
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多