2011-06-12 7 views
3

재생 프레임 워크로 일부 사용자 지정 유효성 검사를 수행하려고하지만 템플릿에서 오류를 가져올 수없는 것 같습니다.Playframework 사용자 지정 유효성 검사 메시지가 템플릿에 표시되지 않는 이유

컨트롤러 코드는 다음과 같습니다


     User user = User.findByEmail(email); 

     if(user != null) { 
      Logger.warn("User account already created for email %s", email); 
      validation.addError("email", "This email address already in use."); 
      params.flash(); 
      flash.error("Please correct the error below!"); 
      signup(); 
     } 
 

과 signup.html 템플릿 :

#{error 'email' /}

내가 컨트롤러가 템플릿에 나타나지 않습니다 중복 이메일하지만 오류 메시지가 표시됩니다 것을 알 수 있습니다 .

위의 코드가 맞습니까?

답변

6

다른보기 (예 : 다시 가입보기로 리디렉션)로 인해 Play는 리디렉션을 수행합니다. 즉, 가입보기가 새 요청으로 처리되므로 오류가 더 이상 범위에 있지 않음을 의미합니다. .

이 문제를 해결하려면 validation.keep() 기능을 사용하여 다음 요청을 위해 유효성 확인 메시지를 사용할 수 있어야합니다.

따라서 코드를 변경하여 signup()으로 전화하기 바로 전에 validation.keep()으로 전화하십시오.

코드는 의미가

if(user != null) { 
    Logger.warn("User account already created for email %s", email); 
    validation.addError("email", "This email address already in use."); 
    params.flash(); 
    flash.error("Please correct the error below!"); 
    validation.keep(); 
    signup(); 
} 
+0

, 감사처럼 보일 것입니다. Play 리디렉션입니까, 아니면 브라우저가 리디렉션합니까? – emt14

+0

Play에서는 상태를 유지하기 위해 브라우저 리디렉션을 부름으로써 새로운 액션을 호출합니다. – Codemwnci

관련 문제