0

私の現在のコントローラーでは、ドキュメントに記載されているようにフラッシュメッセージを渡しています

コントローラ:

def test(token: String) = Action {
        Ok(views.html.mobile.smsReview(smsReviewForm.fill(model), grades, smstoken.get.token))
        .flashing("success" -> Messages("sms.form.write.review"))
      }
  }

私の見解:

@(smsReviewForm: Form[SmsReview], grades: Seq[Grade], smstoken: String)(implicit request: RequestHeader)

...

@request.flash.get("success").getOrElse("HELLO!").map { msg =>
        <div class="alert alert-info">
            @msg
        </div>
    }

ビューで HELLO! 私のメッセージではなく、印刷されます。しかし、Chrome でヘッダーを確認すると、メッセージが表示されます。

Content-Length:3596
Content-Type:text/html; charset=utf-8
Set-Cookie:PLAY_FLASH=success%3AHej%21+Skriv+din+rekommendation+nedan; Path=/; HTTPOnly

私は何を逃したのですか?

4

2 に答える 2

2

flash スコープは、メッセージを次のリクエストに「フラッシュ」するために使用されます。これは主に、別のページにリダイレクトするときに使用されます。最も一般的な使用例は、フォーム投稿の最後のリダイレクトです。

ドキュメントの最初の部分には、次のように記載されています。

複数の HTTP リクエストにわたってデータを保持する必要がある場合は、それらを Session または Flash スコープに保存できます。セッションに保存されたデータはユーザー セッション全体で利用でき、Flash スコープに保存されたデータは次のリクエストでのみ利用できます。

あなたの場合、ビューをレンダリングするときにメッセージを利用できるので、メッセージをビューに直接渡すことができます。

于 2013-03-18T21:26:40.827 に答える
0

ウィキペディアのHTTPCookieページから

Set-Cookieは、ブラウザがCookieを保存し、サーバーへの今後のリクエストでCookieを送り返すためのディレクティブです...

応答のヘッダーを見るSET_COOKIEと、サーバーに対して行う後続のリクエストがCookieを送信し、レンダリングされたビューがフラッシュスコープのデータにアクセスできることを示します((implicit flash: Flash)テンプレート関数定義に追加した場合)。

上記のEECOLORのように、データをパラメータとしてビューに渡す必要があります。この場合、フラッシュスコープを使用する必要はありません。

String以下に、メッセージをパラメーターとしてビューに渡すためのコードをアダプターします。

コントローラ

def test(token: String) = Action {
  Ok(views.html.mobile.smsReview(smsReviewForm.fill(model), grades, smstoken.get.token, "sms.form.write.review"))
}

意見

@(smsReviewForm: Form[SmsReview], grades: Seq[Grade], smstoken: String, message: String)(implicit request: RequestHeader)
...
<div class="alert alert-info">@message</div>
于 2013-03-22T02:39:10.410 に答える