操作后重定向到上一页的模式

Bob*_*ith 8 redirect scala playframework playframework-2.1

在我的Play应用程序中,我有几个可以从不同页面触发的操作(例如"删除"实体).触发操作后,我想在执行操作之前将用户重定向回他们所在的页面.Play中有没有一个好用的模式?

beh*_*zad 5

您可以轻松地@request.getHeader("referer")在模板中使用,例如,如果您有一个取消按钮可以将您重定向到上一页,请使用以下命令:

<a  href="@request.getHeader("referer")">Cancel</a>
Run Code Online (Sandbox Code Playgroud)

这样,您无需将任何其他信息传递到模板。(在游戏2.3.4中进行了测试)


Bob*_*ith 2

这就是我最终想到的,尽管它不是特别优雅,而且我对更好的方法感兴趣。我使用当前页面 URL 在表单中添加了隐藏输入:

@(implicit request: RequestHeader)

...

<form action="@routes.Controller.doStuff()" method="post">
  <input type="hidden" name="previousURL" value="@request.uri"/>
  ...
</form>
Run Code Online (Sandbox Code Playgroud)

然后在我的控制器中:

def doStuff() = Action { implicit request =>
  val previousURLOpt: Option[String] =
    for {
      requestMap <- request.body.asFormUrlEncoded
      values <- requestMap.get("previousURL")
      previousURL <- values.headOption
    } yield previousURL
   previousURLOpt match {
     case Some(previousURL) =>
       Redirect(new Call("GET", previousURL))
     case None =>
       Redirect(routes.Controller.somewhereElse)
   }
}
Run Code Online (Sandbox Code Playgroud)