Play2 和 Flash Scope,为什么我无法打印我的消息?



在我当前的控制器中,我正在传递一个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>

相关内容

  • 没有找到相关文章

最新更新