繁体   English   中英

如何使用MultiActionController将验证错误绑定到请求?

[英]How to bind validation errors to a request using MultiActionController?

我已经尝试了很多在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处理程序方法记住由验证过程(结果对象)导致的错误,当然,我可以将该方法的逻辑复制并粘贴到我的if语句中,但我认为它必须更好不仅仅是复制和粘贴。

任何帮助将不胜感激!

在3.1.x之前的Spring版本中,如果要通过重定向传递对象,则必须使控制器具有“会话”意识。 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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM