POST方法returns错误URL当BindingResult有错误
POST method returns wrong URL when BindingResult has errors
我有这个 POST 方法,它只验证一个表单,returns 一个确认视图,如果表单被验证,如果任何字段有误,我想发回注册屏幕。在这种情况下,如果 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;
}
我不知道我错过了什么,因为我在许多其他帖子中看到过类似的方法。有帮助吗??
非常感谢!!!
解决您的问题的一种方法是使用重定向:
@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 方法。
我有这个 POST 方法,它只验证一个表单,returns 一个确认视图,如果表单被验证,如果任何字段有误,我想发回注册屏幕。在这种情况下,如果 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;
}
我不知道我错过了什么,因为我在许多其他帖子中看到过类似的方法。有帮助吗??
非常感谢!!!
解决您的问题的一种方法是使用重定向:
@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 方法。