【问题标题】:Play Framework: clear Flash scope when going backPlay Framework:返回时清除Flash范围
【发布时间】:2017-10-03 12:33:35
【问题描述】:

我正在使用 scala 2.11.8 和 Play Framework 2.3。我正在提交表单并通过控制器管理结果。控制器返回一个重定向到闪烁特定消息的页面,成功或错误消息:

Redirect(routes.MyController.page).flashing("success" -> "All went well")

然后我使用 javascript 管理此消息,因此可以在模式中看到它:

@flash.get("success").map { message =>
    <script type="text/javascript">
        modalSuccess('@message');
    </script>
}

一切顺利,模态显示。接下来我导航到另一个页面并使用后退箭头返回并再次显示模式。当然,这对用户来说很奇怪:他刚刚点击返回,看到“一切顺利”消息毫无意义。

之前,我将这些消息作为参数传递给页面并返回 200 OK:

Ok(views.html.page(message = "All went well"))

但是由于再次发送了请求,所以发生了完全相同的事情。我切换到 Flash 来解决这个问题,但我似乎无法阻止它在返回上一页时显示。

我应该清除 Flash 范围,还是应该在重定向执行后自行清除?

【问题讨论】:

    标签: scala playframework scope flash-message


    【解决方案1】:

    当您单击返回时,默认情况下浏览器将从缓存中提供页面,不会重新发出请求,这就是这里发生的事情,与 Play 无关。

    对于浏览器后退按钮的行为方式没有标准,特别是在缓存方面,因此解决它并不简单,因为所有浏览器的行为方式都不同。这个 SO 问题/答案相当全面地涵盖了它:

    How to control web page caching, across all browsers?

    但请注意其缺点,如果您告诉浏览器绝对不能缓存页面,最终可能会给用户带来糟糕的体验,例如,如果他们正在填写表单,并且不小心导航离开,然后点击返回,以便他们继续填写表格,如果您现在强制浏览器缓存页面,他们将丢失他们在表格中输入的所有内容。

    另外,如果他们点击返回的原因是他们想再次查看渲染的模型怎么办?当用户点击返回时,他们希望看到他们刚刚访问的页面,就像原来一样。如果你改变了这一点,你就打破了他们的期望。如果这种情况发生在我身上,我会很不高兴——我讨厌当我点击返回并得到一个不同的页面时,如果你这样做,你可能会让你的用户不高兴。

    【讨论】:

      猜你喜欢
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-11
      • 1970-01-01
      • 1970-01-01
      • 2013-02-06
      相关资源
      最近更新 更多