如何将两个对象传递给相同的Spring Controller Form提交?

时间:2011-09-02 00:48:55

标签: java spring spring-mvc

我有以下pojo:

public class Foo {
    @Size(min=0,max=10)
    private String  bar = null;

    @Size(min=0,max=10)
    private String  baz = null;

    .... getters and setters
    }

以及以下控制器:

@Controller
@RequestMapping(value = "/path", method = RequestMethod.POST)
public class Control {
    public String handler(@Valid Foo foo1, BindingResult res_foo1, @Valid Foo foo2, BindingResult res_foo2){
             //Business logic
        }
    }

以及以下表单摘要:

<form action="/path">
    <input name="foo1.bar" type="text" />
    <input name="foo1.baz" type="text" />
    <input name="foo2.bar" type="text" />
    <input name="foo2.baz" type="text" />
</form>

提交表单时出现以下错误:

java.lang.IllegalArgumentException: argument type mismatch

如果对象不同并且pojos具有不同的属性,它可以正常工作。有没有办法使这项工作?

1 个答案:

答案 0 :(得分:6)

我只是想通了。诀窍是将pojos嵌入另一个pojo中。

public class Nest {
    @Valid
    private Foo one = null;

    @Valid
    private Foo two = null;
    .... getters and setters
}

使用这样的控制器:

@Controller
@RequestMapping(value = "/path", method = RequestMethod.POST)
public class Control {
    public String handler(@Valid Nest nest, BindingResult res_nest){
             //Business logic
    }
}

和这样的表格:

<form action="/path">
    <input name="one.bar" type="text" />
    <input name="one.baz" type="text" />
    <input name="two.bar" type="text" />
    <input name="two.baz" type="text" />
</form>

这确实可以单独验证这两个对象,不可能。