在我当前的控制器中,我正在传递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
我错过了什么?
答案 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>