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 方法。