如何在我的Play应用中重定向到错误页面?

时间:2015-06-09 14:55:58

标签: scala rest cookies playframework

或者更准确地说......

我已经定义了错误页面路由,如下所示:

GET  /error  controllers.pages.ErrorController.page(msg: String, returnTo: String)

这样的控制器方法:

object ErrorController extends Controller {
  def page(msg: String, returnTo: String) = ReceiverRestricted { implicit req =>
    val action = List(Button(F8, "Continue", Call("GET", returnTo)))
    Results.Ok(views.html.base(Html("Oops"), List(Html(msg)), None, action))
  }
}

如果我以编程方式调用,比方说,ErrorController.page("You did something daft!", "/home")我会看到一个看起来像我想要的页面,即:

Oops
You did something daft!
F8 Continue

然而网址很难看:

http://localhost:9000/error?msg=You%20did%20something%20daft!&returnTo=/home

我想更改此内容,以便msg=查询参数不会显示在网址中。我怎么能做到这一点?我尝试删除查询参数并重定向到错误页面,并通过flash cookie传递消息 - 这有效但重新加载浏览器页面会丢失消息。我不能使用会话cookie,因为我已经在会话中存储了其他数据,几乎达到了极限。

2 个答案:

答案 0 :(得分:0)

您可以使用闪光灯功能。 这是一个示例: 在您的控制器中,您可以将用户重定向到错误页面:

  Redirect("/error").flashing(
    "reason" -> "The item has been created"
  )

在错误操作中:

def error = Action { implicit request =>
  Ok {
      val reason =     flash.get("reason").getOrElse("General Error")
      //DO your stuff with reason variable
  }
}

显然,你可以拥有你想要的闪存变量。

答案 1 :(得分:0)

由于Play是安静且无状态的,因此我无法在不使用Play闪存的情况下看到在重定向期间传递错误消息的简单方法。当然,您可以将消息存储在浏览器中的临时cookie中。另一种可能性是将它存储在您的数据库中(或者您使用的任何持久性技术),但这似乎就像用大锤破解螺母一样。