Как передать дочерний класс в контроллер в Spring-MVC? - PullRequest
0 голосов
/ 14 сентября 2011

У меня есть родительский класс и его дочерний элемент в моей модели приложения.
И у меня есть следующий метод контроллера:

@RequestMapping(method=RequestMethod.POST, value="/page")
public String postMethod(Model model, Parent obj, BindingResult result) {
     // do something
}

, но я хочу, чтобы он мог обрабатывать экземпляры дочернего класса,который был размещен в форме.
Как я могу это сделать?

1 Ответ

1 голос
/ 14 сентября 2011

Вы можете создать объект требуемого типа в качестве неявного атрибута модели:

@ModelAttribute("parent")
public Parent createChild(@RequestParam("type") String type) {
    if ("foo".equals(type)) return new Foo();
    else if ("bar".equals(type)) return new Bar();
    else return null;
}

Поскольку Spring не запоминает тип объекта, передаваемого в форму автоматически, вам нужно сделать это самостоятельно,добавление скрытого поля формы, значение которого указывает тип объекта (поле type в приведенном выше примере).

Другой вариант - избежать создания объекта с нуля путем его сохранения в сеансе.Его можно настроить с помощью @SessionAttributes annotaton, см. 15.3.2.9 Задание атрибутов для хранения в сеансе с @ SessionAttributes .

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