在我当前的控制器中,我正在传递一个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>
}
在视图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
我错过了什么?
flash作用域用于将消息"flash"到下一个请求。这主要用于重定向到另一个页面。最常见的用例是在表单发布的末尾进行重定向。
文档的第一部分是这样说的:
如果你必须在多个HTTP请求中保存数据,你可以将它们保存在Session或Flash范围中。存储在Session中的数据在整个用户Session期间可用,而存储在Flash作用域中的数据仅对下一个请求可用。
在您的情况下,您可以简单地将消息直接传递给视图,因为在您呈现视图时您有可用的消息
来自维基百科的HTTP Cookie页面
Set-Cookie是一个指令,用于存储cookie并在以后的请求中将其发送回服务器…
在响应中看到SET_COOKIE
标头表明您向服务器发出的后续请求将发送cookie,并且呈现的视图将访问flash作用域中的数据(如果您将(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"))
}
<<p> 视图/strong> @(smsReviewForm: Form[SmsReview], grades: Seq[Grade], smstoken: String, message: String)(implicit request: RequestHeader)
...
<div class="alert alert-info">@message</div>