我在Controller類中遇到了一些問題。第一次調用時,我有一個Login頁面,Controller使用用GET請求註釋的方法。當表單發佈後,它將使用POST請求註釋的方法。SpringMVC驗證問題
只有當表單發佈時,我想執行驗證。所以驗證檢查放在POST方法(@Valid)中。我有一個@InitBinder函數,但是當POST表單沒有被執行時,所以沒有從Validation類返回錯誤消息,也沒有將'result.hasErrors()'方法設置爲false。如果我將@Valid放在GET上,我會得到驗證意味着result.hasErrors()被設置爲false。
我不知道什麼時候@InitBinder函數被執行或者如何只允許執行POST請求。目前,當頁面爲GET時,唯一被執行的消息是「歡迎它是一個get」,這正是我想要的,但是我得到'POST錯誤!這是一個帖子',驗證沒有得到執行。在一些代碼:
代碼在GET控制器類
@InitBinder("login")
protected void initBinder(WebDataBinder binder){
binder.setValidator(new LoginValidation());
}
我沒有做任何事情,除了顯示頁面
@RequestMapping(value="login.htm", method=RequestMethod.GET)
public ModelAndView onSubmit(HttpServletRequest request,HttpServletResponse response,Model model, @ModelAttribute("login") Login login,BindingResult result)
throws ServletException {
return new ModelAndView("login","errorMsg", "Welcome it was a get");
}
@RequestMapping(value="login.htm", method=RequestMethod.POST)
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response, @Valid @ModelAttribute Login login, BindingResult result, ModelMap m) throws Exception {
if(result.hasErrors()){
return new ModelAndView("login", "errorMsg", "Errors was detected");
}else{
if (authenticationManager.Authenticate(login) == true){
return new ModelAndView("main","welcomeMessage", message);
}
return new ModelAndView("login","errorMsg", "Error!!! It was a post");
}
然後,接受你自己的問題:) – jelies
不能接受兩個,直到幾天後那就是它所說的 – devdar