或者更准确地说......
我已经定义了错误页面路由,如下所示:
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,因为我已经在会话中存储了其他数据,几乎达到了极限。
答案 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中。另一种可能性是将它存储在您的数据库中(或者您使用的任何持久性技术),但这似乎就像用大锤破解螺母一样。