我已经尝试了很多在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语句中复制并粘贴该方法的逻辑,但我认为它必须比复制和粘贴更好。
任何帮助都将受到高度赞赏!
答案 0 :(得分:0)
在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可以完成这项任务。
下面是一些显示原理的代码:
@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。