当BindingResult有错误时,POST方法返回错误的URL

时间:2016-03-06 12:41:16

标签: java spring-mvc http-post thymeleaf

我有这个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;

}

我不知道我错过了什么,因为我在很多其他帖子中看到过这样的方法。任何帮助?

非常感谢!!!

1 个答案:

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