我有这个POST方法,它只验证表单并在表单验证时返回确认视图,如果有任何字段错误我想发送回寄存器屏幕。在这种情况下,如果BindingResult对象有错误,系统会将用户发送回表单屏幕,但显示的URL是" / registerConfirmation"这应该只是表格没有错误。
@RequestMapping(value="/registerConfirmation", method = RequestMethod.POST)
public ModelAndView confirmRegister(@Valid @ModelAttribute("form") RegistrationForm form, BindingResult result){
logger.info("Sending registration data");
ModelAndView modelAndView = new ModelAndView();
if(result.hasErrors()){
modelAndView.setViewName("register");
modelAndView.addObject("form", form);
return modelAndView;
}
//more code here
return modelAndView;
}
我不知道我错过了什么,因为我在很多其他帖子中看到过这样的方法。任何帮助?
非常感谢!!!
答案 0 :(得分:0)
解决问题的一种方法是使用重定向:
@RequestMapping(value="/registerConfirmation", method = RequestMethod.POST)
public String confirmRegister(@Valid @ModelAttribute("form") RegistrationForm form, BindingResult result, RedirectAttributes attr){
logger.info("Sending registration data");
if(result.hasErrors()){
attr.addFlashAttribute("org.springframework.validation.BindingResult.form", result);
attr.addFlashAttribute("form", form);
return "redirect:/register";
}
//more code here
return "redirect:/registerConfirmation";
}
在您的注册GET方法中,您应该检查:
@RequestMapping(value="/register", method = RequestMethod.GET)
public String showRegister(Model model) {
....
if (!model.containsAttribute("form")) {
model.addAttribute("form", new RegistrationForm());
}
.....
}
你可以阅读更多in this article
另外不要忘记使用registerConfirmation
值创建GET方法。