Не знаете, как проверить пружинную форму MVC, каковы мои варианты?

Последняя пружина 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;
  }

}

Теперь это сработало, если моя форма сопоставлялась непосредственно с формой, но в моей ситуации у меня есть:

  1. поля формы, которые не сопоставляются с какой-либо конкретной моделью, они имеют несколько свойств из 2 моделей.

  2. Перед выполнением проверки мне нужно вручную создать 2 модели, задать значения из формы, а также вручную задать некоторые свойства:

  3. Вызов проверки на обеих моделях (model1, model2) и добавление этих сообщений об ошибках в коллекцию ошибок, которую мне нужно передать обратно на ту же страницу просмотра, если что-то не работает.

  4. Когда форма публикуется, мне приходится выполнять некоторые вызовы базы данных, и на основе этих результатов может потребоваться добавить дополнительные сообщения в коллекцию ошибок.

Может ли кто-нибудь подсказать мне, как сделать такого рода проверку?

Псевдокод ниже:

   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

Пожалуйста, прочитайте описание баунти ниже для краткого изложения того, что я ищу.

5
задан Mdhar9e 13 April 2012 в 15:06
поделиться