0

在我当前的控制器中,我正在传递文档中描述的 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

我错过了什么?

4

2 回答 2

2

flash 作用域用于将消息“闪烁”到下一个请求。这主要在您重定向到另一个页面时使用。最常见的用例是表单帖子末尾的重定向。

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

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

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

于 2013-03-18T21:26:40.827 回答
0

来自 Wikipedia 上的HTTP Cookie页面

Set-Cookie 是浏览器存储 cookie 并在将来的请求中将其发送回服务器的指令...

在响应中看到SET_COOKIE标头表明您向服务器发出的后续请求将发送 cookie,并且呈现的视图将有权访问 flash 范围内的数据(前提是您添加(implicit flash: Flash)到模板函数定义中)。

正如上面所说的EECOLOR,您只需将数据作为参数传递给您的视图。在这种情况下,不需要使用 flash 示波器。

下面我调整了您的代码以将消息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 回答