【问题标题】:Bind of the model with view in POST with Spring MVC 3使用 Spring MVC 3 在 POST 中将模型与视图绑定
【发布时间】:2013-06-21 01:44:52
【问题描述】:

我试图在我的控制器中进行依赖注入,而不是使用 setters 方法,但它不起作用。目的是在使用控制器发布数据表单时将表单输入与我的域模型的属性绑定。

我想要什么:只需在使用 springframework 3.1 的控制器类中将域模型与我的表单绑定。

我的域类:

public class Person {

  private String name;

  @Autowired
  public Person(String name) {
    this.name = name;
  }

  public String getName() {
    return this.name;
  }

}

我的 jsp(person-get):

<form action="test-person" method="post">
<table cellpadding="0" cellspacing="0" align="center">
  <tr>
      <td> <b> NAME: </b> </td>
      <td> <input type="text" id="name" name="name"> </td>
  </tr>
</table> 
</form>

我的控制器:

@Controller
public class PersonController {

@RequestMapping(value = "test-person", method = RequestMethod.GET)
public String loadViewGet() {       
  return "person-get";
}

@RequestMapping(value = "test-person", method = RequestMethod.POST)
public String doPost(Person person, Model model) {

    model.addAttribute("person", person);

    return "person-post";
    }

}

最后一个jsp显示用户输入的人名(person-post):

<table cellpadding="0" cellspacing="0" align="center">
<tr>
    <td> <b> NAME: </b> </td>
    <td> ${person.name} </td>
</tr>
</table> 

有没有一种方法可以在不使用 setter 方法的情况下将表单输入与我的模型类(Person)绑定?

有人知道另一个可以实现这一点的 java web 框架吗?

谢谢!

【问题讨论】:

  • "改为使用setter方法,但是没用"怎么没用?
  • 抛出异常,说明该属性不存在。 Spring MVC 在 setter 方法中使用反射来做到这一点。我想知道是否有另一种方法 - 不使用 setter 方法 - 这样做。谢谢!
  • 现在我看到这个问题只是你之前的问题stackoverflow.com/questions/17220310/…的重复。
  • 是的,我把它放在了错误的标签中——Java 代替了 Spring MVC。我要联系管理员删除以前的。谢谢。

标签: spring-mvc


【解决方案1】:

@Autowired 注释和依赖注入支持由应用程序上下文的 bean 工厂创建的 bean(在应用程序上下文 XML 或 @Configuration bean 中定义的 bean)。

MVC 的域模型对象是在请求数据绑定过程中由处理程序参数解析器(而不是由应用程序上下文)创建的。不支持自动装配和其他 DI 功能。您必须为域模型对象使用用户属性访问器(getter 和 setter)。

【讨论】:

  • 我必须?那么,这是唯一的方法吗?
  • DDD 呢?我需要有贫血的对象,因为 Spring MVC 就是这样工作的?如果别无选择,我会找到另一个不强迫我这样做的框架 - 使用 FIELD 反射而不是方法反射。我也在自己构建一个小框架,让我们看看会是什么。非常感谢您的解释!
  • Spring 是高度可定制的...随意编写您自己的HandlerMethodArgumentResolver。然后你需要自己做绑定。仅仅是因为 Spring 的数据绑定基于属性访问器这一事实吗?
  • 是的,就是这个。这会损害模型的业务——在我在这里的一些小项目中,我不能让对象使用 setter 方法,因为如果程序员使用 setter 而不是正确的方法,这会导致它的状态不一致。
  • 我不了解 HandlerMethodArgumentResolver。我不是 Spring MVC 方面的专家,只是对它有一个很好的了解。你能解释一下吗?再次感谢您!
猜你喜欢
  • 1970-01-01
  • 2011-11-12
  • 2023-03-06
  • 2014-04-18
  • 2011-07-15
  • 2020-06-20
  • 2017-10-25
  • 1970-01-01
  • 2012-07-27
相关资源
最近更新 更多