Play Framework - 使用参数重定向

Posted

技术标签:

【中文标题】Play Framework - 使用参数重定向【英文标题】:Play Framework - Redirect with params 【发布时间】:2012-04-04 21:20:04 【问题描述】:

我试图弄清楚如何使用 Scala 在 Play (2.0) 中的控制器操作中进行重定向。

重定向使用

Redirect(routes.Application.index)

工作得很好。

我无法从文档、API 或 Google 中弄清楚如何向调用添加参数。

我来自 Grails,这可以通过以下方式轻松完成:

重定向操作:“索引”,参数:[“键”:“值”] .

我发现的唯一方法是使用字符串 url 和查询字符串调用 Redirect,这看起来很尴尬。

基本上我想以某种方式使用 Redirect(Call),但我不知道如何使用反向路由创建 Call 对象。

我是否遗漏了什么/没有在 Play/Scala 中理解这个概念?

提前致谢!

【问题讨论】:

【参考方案1】:

艾露'

路由只是一个函数,所以你可以像往常一样传递参数:

// Redirect to /hello/Bob
def helloBob = Action 
    Redirect(routes.Application.hello("Bob"))    

这个sn-p来自http://www.playframework.org/documentation/2.0/ScalaRouting(在底部)

【讨论】:

谢谢!实际上,我首先尝试了这个,但是编译器抱怨说我输入了太多参数。问题是:该操作需要很长时间,但在我定义的路由中,该操作应该有一个默认值。我不得不删除它。所以现在我需要调用 index(None) 或 index(Some(foo))。来自 Grails 这似乎真的很乏味。 +1 这就是类型安全 URL 的全部意义所在。我希望 play 能以他们的本来面目卖给他们更多。 最近的比赛有变化吗?我似乎无法找到/导入路线(我得到价值路线未定义)。【参考方案2】:

您也可以避免在控制器中为此创建另一个函数。在您的路由配置中,您可以简单地添加如下内容:

  GET  /google  @controllers.Default.redirect(to = "http://google.com")

【讨论】:

@zenith:希望对您有所帮助 这似乎不起作用。我得到No such file or directory

以上是关于Play Framework - 使用参数重定向的主要内容,如果未能解决你的问题,请参考以下文章

Play Framework:验证错误重定向的最佳实践

scala路由设置(重定向)

在 Play 框架中重定向到同一控制器中的动作

Facebook 请求重定向到 Play 商店(而不是实际应用,当它已经安装时)

来自 Google Play 的意图重定向

当与查询参数关联的转换/验证失败时执行重定向