2017-01-14 2 views
0

私はplay2.5 scalaプロジェクトを持っています。たとえば、エラーが発生した場合など、コントローラからグローバルメッセージを渡したいとします。フォームのグローバルメッセージを使わずにこれをどうすれば実現できますか?scala play2.5グローバルメッセージをテンプレートに渡す方法

たとえば、handleRegisterErrorメソッドでは、ページ外の上部に表示されるグローバルエラーメッセージをスローしたいと思います。

これにはどのような方法が最適ですか?

私はあなたがテンプレートパラメータとしてRequestHeaderを追加した場合、エラーメッセージをレンダリングFlash範囲

Redirect(views.html.register(RegisterForm.form)).flashing("error" -> "Oops, you've got an error") 

に添付されたメッセージでRedirectを使用することができるはずトワールテンプレートに

def registerUser = Action.async { implicit request => 

    RegisterForm.form.bindFromRequest.fold(
     formWithErrors => { 
     Future.successful(BadRequest(views.html.register(formWithErrors))) 
     }, 
     formData => { 
     registerUserService.registerUser(formData).map{ insertedId => 
      Ok(views.html.index("")) 
     } 
     .recover { 
      case cause => handleRegisterError(cause) 
     } 
     }) 


    } 

    def handleRegisterError(cause: Throwable)(implicit req: RequestHeader) : Result = {   
    cause match { 
     case dae: DataAccessException => 
     //add an error message here 
     BadRequest(views.html.register(RegisterForm.form)) 
     case _ => 
     BadRequest(views.html.register(RegisterForm.form)) 
    } 
    } 

答えて

1

を使用しています定義された。

@(form: Form[RegisterForm])(implicit request: RequestHeader) 

@request.flash.get("error").map { message => 
    <div>@message</div> 
} 
+0

リダイレクトしたくない場合はどうすればよいですか? – simonC

+1

まあ、どんなオブジェクトでもTwirlテンプレートに渡すことができます – yahor

+0

これは私が最後に実装した方法ですが、このようなものがすでに組み込まれていれば放浪していました...とにかくinfoのtnx – simonC

関連する問題