2012-09-01 3 views
1

컨트롤러 클래스에 몇 가지 문제가 있습니다. 컨트롤러가 GET 요청으로 주석 된 메소드를 처음으로 호출 할 때 로그인 페이지가 있습니다. 양식이 게시되면 POST 요청으로 주석 된 메소드를 사용합니다.SpringMVC 유효성 확인 문제

양식이 게시 될 때만 유효성 검사를 실행하고 싶습니다. 유효성 검사는 POST 메서드 (@Valid)에 있습니다. 나는 @InitBinder 함수를 가지고 있지만 폼을 POST 할 때 실행되지 않습니다. 따라서 Validation 클래스에서 반환 된 오류 메시지 나 'result.hasErrors()'메서드가 false로 설정되지 않습니다. 내가 GET에 @Valid를두면 유효성 검사 결과를 얻습니다. result.hasErrors()는 false로 설정됩니다.

@InitBinder 함수가 실행될 때 또는 POST 요청시에만 실행을 허용하는 방법을 잘 모르겠습니다. 현재 페이지가 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"); 

    } 

답변

0

이 페이지를 표시 외에 : 아래에서 일부 코드는 내 매개 변수에 흰 공백이있었습니다. @InitBinder ("login")의 binder.registerCustomEditor (String.class, new StringTrimmerEditor (true))를 사용하여 문제가 해결됨

+0

후 공백을 다듬기 자신의 질문을 받아 :) – jelies

+1

가 될 때까지 후 2 일 동의하지 못할 것입니다 그게 뭐래? – devdar

0

처음 GET을 사용하여 페이지를 요청하면 유효성 검사가 주로 발생합니다. 필드는 페이지 요청시 비어 있고 @InitBinder ("login")는 요청 될 때마다 페이지에서 어떤 일이 일어나기 전에 실행됩니다.

보기의 필드가 비어 있어도 페이지가 POST 였을 때 유효성 검사가 실패하지 않은 이유는 유효성 검사가 GET 요청 페이지에서 실행되고 개체를 다시보기로 반환했기 때문입니다 데이터 바인딩 중 공백

이 문제를 해결하려면 유효성 검사 논리 필드의 길이를 계산하고 server.When 로그를 조사했을 때 유효성 검사 로직은 주로 NULL을 검사했기 때문에 필드가 NULLS가 아닌 것을 보았다 . 공백에 대한

해결 방법 : @Controller @InitBinder 기능으로는 다음과 같습니다

binder.registerCustomEditor(String.class, new StringTrimmerEditor(true)); 

이,

관련 문제