2012-04-04 94 views
13

我想弄清楚如何在使用Scala的Play(2.0)中的控制器操作中执行重定向。Play Framework - 使用参数重定向

使用

Redirect(routes.Application.index) 

作品就好了重定向。

我无法从文档,API或Google了解到如何将参数添加到调用中。

重定向动作: “指数”,则params:

我从Grails的地方如下这可以轻松完成未来[ “钥匙”: “值”] 。

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

基本上我想利用重定向(Call),但我不知道如何使用反向路由创建Call对象。

我错过了什么/没有得到Play/Scala中的概念?

在此先感谢!

回答

15

Ellou”

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

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

这个片段来自http://www.playframework.org/documentation/2.0/ScalaRouting(底部)

+0

谢谢!实际上,我首先尝试了这一点,但编译器抱怨说我输入了太多的论点。问题是:这个动作需要一个Long,但是在我定义的Routing中,应该有一个默认的动作值。我必须删除它。所以现在我需要调用index(None)或index(Some(foo))。来自Grails,这似乎真的很乏味。 – pchronz 2012-04-04 23:10:41

+3

+1这是类型安全的网址。我希望游戏能够更多地出售他们的产品。 – 2012-04-04 23:16:08

+1

+1类型安全,@DanBurton,thanx编辑 – biesior 2012-04-05 08:14:37

0

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

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

@zenith:希望它有帮助 – 2015-03-22 09:19:22

+0

Muuuuch更好! – emlai 2015-03-22 09:21:02

+0

这似乎并不奏效。我得到'没有这样的文件或目录' – 2016-07-25 22:57:29