Последняя пружина mvc, использующая фримаркер.
Надеюсь, что кто-то может рассказать мне, каковы мои варианты с точки зрения проверки формы с пружинным mvc, и каков был бы рекомендуемый способ сделать это.
У меня есть форма, которая не сопоставляется непосредственно с моделью, в ней есть поля ввода, которые при публикации будут использоваться для инициализации 2 объектов модели, которые мне затем нужно будет проверить, и если они пройдут, я их сохраню.
Если они не работают, я хочу вернуться обратно в форму, предварительно заполнить значения тем, что ввел пользователь, и отобразить сообщения об ошибках.
Я прочитал здесь и там о 2 методах, один раз я сделал и понял, как это работает:
@RequestMapping(...., method = RequestMethod.POST)
public ModelAndView myMethod(@Valid MyModel, BindingResult bindingResult) {
ModelAndView mav = new ModelAndView("some/view");
mav.addObject("mymodel", myModel);
if(bindingResult.hasErrors()) {
return mav;
}
}
Теперь это сработало, если моя форма сопоставлялась непосредственно с формой, но в моей ситуации у меня есть:
поля формы, которые не сопоставляются с какой-либо конкретной моделью, они имеют несколько свойств из 2 моделей.
Перед выполнением проверки мне нужно вручную создать 2 модели, задать значения из формы, а также вручную задать некоторые свойства:
Вызов проверки на обеих моделях (model1, model2) и добавление этих сообщений об ошибках в коллекцию ошибок, которую мне нужно передать обратно на ту же страницу просмотра, если что-то не работает.
Когда форма публикуется, мне приходится выполнять некоторые вызовы базы данных, и на основе этих результатов может потребоваться добавить дополнительные сообщения в коллекцию ошибок.
Может ли кто-нибудь подсказать мне, как сделать такого рода проверку?
Псевдокод ниже:
Model1 model1 = new Model1();
Model2 model2 = new Model2();
// manually or somehow automatically set the posted form values to model1 and model2.
// set some fields manually, not from posted form
model1.setProperty10(GlobalSettings.getDefaultProperty10());
model2.setProperty11(GlobalSettings.getDefaultProperty11());
// db calls, if they fail, add to errors collection
if(bindingResult.hasErrors()) {
return mav;
}
// validation passed, save
Model1Service.save(model1);
Model2Service.save(model2);
redirect to another view
Обновление
Я использую аннотации JSR 303 на своих моделях прямо сейчас, и было бы здорово, если бы я мог использовать их до сих пор.
Обновление II
Пожалуйста, прочитайте описание баунти ниже для краткого изложения того, что я ищу.