【问题标题】:Is Spring 3 @RequestMapping supposed to auto-bind request parameters?Spring 3 @RequestMapping 是否应该自动绑定请求参数?
【发布时间】:2012-03-02 16:21:28
【问题描述】:

请求参数的自动绑定似乎是默认行为,但我找不到很多关于它的文档。这是我的例子:

<form:form modelAttribute="test" action="testsubmit.do" method="POST">
  Name: <form:input path="name" />
  Nested Name: <form:input path="test.nestedName"/> 
<input type="submit"/>


public class Test {
    public String name;
    public String name2;
    public TestNested test;
    ...

public class TestNested {
    public String nestedName;
    ...

现在我的映射:

@RequestMapping(value = "/testsubmit")
public String testSubmit(Test test){
    ...

test 对象正在绑定表单值,包括嵌套值。在我看来,这似乎是预期的行为,但我对 @ModelAttribute 注释及其在指定为映射方法参数的对象方面的使用感到有些困惑。

15.3.2.8 Providing a link to data from the model with @ModelAttribute 说:

当您将它放在方法参数上时,@ModelAttribute 将模型属性映射到特定的带注释的方法参数(请参阅下面的 processSubmit() 方法)。这就是控制器获取对保存表单中输入数据的对象的引用的方式。

当我在加载时将对象test 绑定到表单时,我将值设置为name2

@RequestMapping(value = "/test")
public String test(Model model) {       
    Test test = new Test();
    test.setName2("test name2");
    model.addAttribute("test", test);
    return "test";
}

当我用@ModelAttribute("test") 注释test 参数时,这不会通过submit 方法传递:

@RequestMapping(value = "/testsubmit")
public String testSubmit(@ModelAttribute("test") Test test) {
    ...

这是我所期望的,因为 name2 没有被指定为表单字段/请求参数,但这并不能帮助我理解 @ModelAttribute("test") 用法的意义。任何人都可以为我阐明这一点吗?

【问题讨论】:

    标签: forms spring-mvc parameters modelattribute


    【解决方案1】:

    @ModelAttribute 只允许您为模型中的对象指定不同的名称/键。如果你不使用它,Spring 会根据对象的类自动分配一个名称,例如“测试”在您的“测试”类的情况下。使用@ModelAttribute,您可以通过指定“@ModelAttribute("whatever")”将模型中对象的名称/键更改为“whatever”。

    【讨论】:

      猜你喜欢
      • 2011-07-01
      • 1970-01-01
      • 2020-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-05
      • 1970-01-01
      相关资源
      最近更新 更多