Play2和Flash Scope,为什么我不能打印我的消息?

时间:2013-03-18 15:20:50

标签: scala playframework-2.1 flash-scope

在我当前的控制器中,我正在传递docs

中所述的Flash消息

控制器:

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>
    }

在视图中你好!打印,而不是我的消息。但是,如果我检查Chrome中的标题,我的消息就在那里:

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

我错过了什么?

2 个答案:

答案 0 :(得分:2)

闪存范围用于将消息“刷新”到下一个请求。这主要用于重定向到其他页面时。最常见的用例是表单帖子末尾的重定向。

文档的第一部分说明了这一点:

  

如果必须跨多个HTTP请求保留数据,则可以将它们保存在会话或Flash范围中。存储在会话中的数据在整个用户会话期间可用,存储在Flash范围内的数据仅可用于下一个请求。

在您的情况下,您可以直接将消息传递给视图,因为您在呈现视图时有消息可用。

答案 1 :(得分:0)

来自维基百科上的HTTP Cookie页面

  

Set-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>