Как связать ошибки проверки с запросом, используя MultiActionController? - PullRequest
0 голосов
/ 26 ноября 2010

Я много пытался реализовать валидацию внутри MultiActionController, и, похоже, это не так просто. Мне нужно проверить форму и, в случае сбоя, я хочу перенаправить на ту же форму, отображая ошибки, а также возможность загрузить некоторую информацию из базы данных. Так что в основном у меня есть это:

@RequestMapping("/addResponse.htm")
public ModelAndView addResponse(@ModelAttribute("responseDTO") ResponseDTO
             respDTO, BindingResult result, HttpServletRequest request) { 

 ResponseFormValidator respValidator = new ResponseFormValidator();
 respValidator.validate(respDTO, result);

 if (result.hasErrors()) {
  return new ModelAndView("redirect:responseForm.htm?id=" + respDTO.getProjID());
 }
}

Я хочу, чтобы метод обработчика responseForm запоминал ошибки, возникшие в результате процесса проверки (Result Object) Конечно, я могу скопировать и вставить логику из этого метода в мое утверждение if, но я думаю, что это должен быть лучший способ, чем просто копировать и вставлять.

Любая помощь будет высоко оценена!

1 Ответ

0 голосов
/ 26 января 2012

В версии Spring до 3.1.x, если вы хотите передать объект через перенаправление, вы должны сделать так, чтобы ваш контроллер знал о «сеансе».http://static.springsource.org/spring/docs/2.5.x/reference/portlet.html#portlet-controller (часть 16.9, ищите @SessionAttribute)

Но после того как вы несете ответственность за очистку объектов, сохраненных в сеансе, которые вы больше не хотите использовать.

В Spring 3.1.x flashAttribute - очень полезный механизм, и Spring делает всю работу для этого.

http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-flash-attributes

Ниже приведен небольшой код, демонстрирующий принцип:

@RequestMapping(value = "form", method = RequestMethod.GET)
public String showForm(@ModelAttribute("form") FormBean formBean) {

    // Set some properties if needed

    return "tiles-litools-mml";
}

@RequestMapping(value = "form", method = RequestMethod.POST)
public String formAction( @Validated({MyValidator.class})
    @ModelAttribute("form") FormBean formBean,
    BindingResult validatorresult, Model model, Errors errors,
    RedirectAttributes redirectAttributes) {

    //redirect if any error
    if (validatorresult.hasErrors()){

        redirectAttributes.addFlashAttribute("message", "MML session failed");
        redirectAttributes.addFlashAttribute("form", formBean);
        redirectAttributes.addFlashAttribute("validation", validatorresult);
        return "redirect:/app/tools/form"; // redirect to the form GET method

    }

    // TODO continue code for process the form (valid!)


} 

Я полагаю, вы не расширяете MultiActionController.

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