У меня есть аннотированный контроллер Spring 2.5, в котором у меня есть метод, аннотированный с помощью @RequestMapping (method = RequestMethod.GET), который выполняет некоторую логику для заполнения модели.
У меня также есть метод, помеченный @RequestMapping (method = RequestMethod.POST), который выполняет запрос. Этот метод имеет аннотированный параметр @ModelAttribute, который содержит мою собственную форму pojo, назовем ее MyForm. У меня также есть метод инициализации для MyForm, также аннотированный @ModelAttrribute. Пока все работает, как ожидалось: при запросе POST данные формы привязываются к MyForm, и я могу их обработать.
Проблема в том, что я хочу иметь возможность предварительно заполнить форму, передав параметры запроса (GET). Поскольку у меня есть метод @ModelAttribute для MyForm, я получаю экземпляр MyForm в своей модели, но он не заполняется, если я специально не использую его в качестве параметра для моего метода GET.
Почему я должен это делать, можно ли по-другому принудительно привязать данные к моей форме для запроса GET? Теперь я просто передаю параметр, но поскольку он уже присутствует в модели, мне не нужно с ним ничего делать, что приводит к уродливому неиспользуемому параметру метода.
[Изменить: несколько примеров кода для иллюстрации]
Контроллер, который не заполняет форму при получении запроса:
@Controller
public class MyController {
@ModelAttribute("myForm")
public MyForm createForm() {
return new MyForm();
}
@RequestMapping(method=RequestMethod.GET)
public void handlePage(Model model) {
//Do some stuff to populate the model....
}
@RequestMapping(method=RequestMethod.POST)
public void processForm(@ModelAttribute("myForm") MyForm myForm) {
//Process the form
}
}
Когда я изменяю сигнатуру метода handlePage, он заполняется при получении запроса ...
@RequestMapping(method=RequestMethod.GET)
public void handlePage(Model model, @ModelAttribute("myForm") MyForm myForm) {
//Do some stuff to populate the model....
}