Как передать два объекта в одну и ту же форму Spring Controller? - PullRequest
2 голосов
/ 02 сентября 2011

У меня есть следующее 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 Ответ

6 голосов
/ 02 сентября 2011

Я только что понял это. Хитрость заключается в том, чтобы вкладывать 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>

Это делает проверку двух объектов по отдельности невозможной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...