7

Play Framework 2에서 스칼라 템플릿을 렌더링 할 때 선택적 매개 변수를 정의 할 수 있습니까?플레이 2 - 자바 컨트롤러에서 템플릿 매개 변수의 기본값을 설정하는 방법은 무엇입니까?

내 컨트롤러는 다음과 같습니다

내 스칼라 템플릿은 다음과 같습니다
public static Result recoverPassword() { 
    Form<RecoveryForm> resetForm = form(RecoveryForm.class); 
    return ok(recover.render(resetForm)); 
    // On success I'd like to pass an optional parameter: 
    // return ok(recover.render(resetForm, true)); 
} 

: 방법 : 내가 오류 "가지고 두 경우 모두

@(resetForm: Form[controllers.Account.RecoveryForm]) (success:Boolean = false) 

: 또한 시도

@(resetForm: Form[controllers.Account.RecoveryForm], success:Boolean = false) 

주어진 클래스에 복구 할 수 없습니다. "

자바 컨트롤러에서

답변

6

당신이 (스칼라 컨트롤러 또는 다른 템플릿이 작동에서) 값의 대입을 생략 할 수 없으며,이 상황에서 가장 빠르고 가장 깨끗한 해결책은 대입 즉, 기본값으로 모든 시간 :

public static Result recoverPassword() { 
    Form<RecoveryForm> resetForm = form(RecoveryForm.class); 

    if (!successfullPaswordChange){ 
     return badRequest(recover.render(resetForm, false)); 
    } 

    return ok(recover.render(resetForm, true)); 
} 

스칼라 컨트롤러와 템플릿을 호출 할 수있는 다른 템플릿은 거기에 지정되지 않은 경우 기본값을 준수하므로 스칼라 템플릿은 변경되지 않습니다.

BTW : 당신이 볼 수 있듯이, 당신은 또한 badRequest()ok()를 참조 Play의 actions에서 결과를 반환하기위한 적절한 방법을 사용한다 : forrbiden(), notFound(), 등, 등

또한 채우기 메시지와 사용 flash scope을 사용할 수 있습니다 암호를 성공적으로 변경 후 메인 페이지로 redirect() 플래시 메시지가있는 경우에, 당신은 확인할 수 있으며 표시 :

public static Result recoverPassword() { 
    ... 
    if (!successfullPaswordChange){ 
     return badRequest(recover.render(resetForm, false)); 
    } 

    flash("passchange.succces", "Your password was reseted, check your mail"); 
    return redirect(routes.Application.index()); 
} 

을 템플리트의 :

@if(flash.containsKey("passchange.succces")) { 
    <div class="alert-message warning"> 
     <strong>Done!</strong> @flash.get("passchange.succces") 
    </div> 
} 

(이 조각은 자바의 컴퓨터 데이터베이스 샘플에서 복사, 그래서 당신은 당신의 자신의 디스크에 확인하실 수 있습니다) 빠른 답변을

+0

감사합니다. 성공 var는 이메일이 사용자에게 보내 졌음을 나타내며 템플릿에서 비밀번호 재설정 양식을 다시 표시하는 대신 성공 메시지를 렌더링합니다. 템플릿의 success-var 및 if-construct의 도움으로이 작업을 수행해야합니까? 그렇지 않으면 두 개의 다른 템플릿 파일을 더 사용해야합니까? – joafeldmann

+0

두 개의 템플릿이 얼마나 정교한 지에 따라 폼 또는 메시지가있는 단순한 컨테이너 일 경우 하나의 '보기'만 사용하면됩니다. – biesior

+0

좋아, 그럼 하나의보기로 계속하겠습니다. 다시 한번 감사드립니다. – joafeldmann

관련 문제