Playframework 使用默认变量调用反向路由器

Playframework 使用默认变量调用反向路由器,playframework,playframework-2.1,Playframework,Playframework 2.1,在我的路由器里我有 GET /:namespace/:name controllers.Application.page_view(namespace: String, name: String, redirect:Boolean ?= true) <pre> @(routes.Application.page_view("one", "two")) @(routes.Application.page_view("three", "four", true

在我的路由器里我有

GET    /:namespace/:name    controllers.Application.page_view(namespace: String, name: String, redirect:Boolean ?= true)
<pre>
    @(routes.Application.page_view("one", "two"))
    @(routes.Application.page_view("three", "four", true))
    @(routes.Application.page_view("five", "six", false))
</pre>
private static final boolean DEFAULT_REDIRECT = true;

在URL中,如果需要默认值以外的值,我可以执行
/main/home
/main/name?redirect=0
。我想对反向路由器进行类似的调用,但例如:
返回重定向(routes.Application.page_view(“main”、“home”)不工作。。。我也需要在其中包含一个“true”(默认值),是否可以在不声明可选变量的情况下进行调用?

否在Java的反向路由参数或视图参数中不可能-您需要在控制器中指定默认值:

return redirect(routes.Application.page_view("main", "home", true));
另一方面,在Scala驱动的视图中,您可以根据需要执行以下操作:

控制器

<pre>
    @(routes.Application.pageViewDefault("one", "two"))
    @(routes.Application.pageView("three", "four", false))

    vs.
    @(routes.Application.pageView("one", "two"))
    @(routes.Application.pageView("three", "four", false))
</pre>
无论如何根据我的经验,我可以告诉你,从长远来看,这对你来说是不舒服的:你需要记住每次(无论是在控制器中还是在视图中),如果你现在选择
pageView
pageViewDefault
。我想最好的办法是,只需使用单个操作,并记住在需要时添加默认重定向-
pageView(ns,n,true)
vs
pageView(ns,n,false)

此外,您还需要记住视图中的
*默认
操作,而使用单个操作时,您不会:

因此,您可以稍后将其用于默认路线:

返回重定向(routes.Application.pageView(“main”、“home”、默认的_重定向))


另外,如果您将有许多操作,每个操作都有可选的
重定向
参数,则需要创建
*默认
操作+专用路由。

否,在Java的反向路由参数或视图参数中不可能-您需要在控制器中指定默认值:

return redirect(routes.Application.page_view("main", "home", true));
另一方面,在Scala驱动的视图中,您可以根据需要执行以下操作:

控制器

<pre>
    @(routes.Application.pageViewDefault("one", "two"))
    @(routes.Application.pageView("three", "four", false))

    vs.
    @(routes.Application.pageView("one", "two"))
    @(routes.Application.pageView("three", "four", false))
</pre>
无论如何根据我的经验,我可以告诉你,从长远来看,这对你来说是不舒服的:你需要记住每次(无论是在控制器中还是在视图中),如果你现在选择
pageView
pageViewDefault
。我想最好的办法是,只需使用单个操作,并记住在需要时添加默认重定向-
pageView(ns,n,true)
vs
pageView(ns,n,false)

此外,您还需要记住视图中的
*默认
操作,而使用单个操作时,您不会:

因此,您可以稍后将其用于默认路线:

返回重定向(routes.Application.pageView(“main”、“home”、默认的_重定向))


此外,如果您将有许多操作,每个操作都带有可选的
重定向
参数,则您需要创建
*默认
操作+专用路径。

顺便提一下,我发现了一个解决方法(可能不推荐),如果我在原始语句下面添加路由器-
/:namespace/:name controllers.Application.page\u view\u default(namespace:String,name:String)
(其中/:namespace/:name是重复的,page\u view\u default在控制器中声明,但不希望它执行任何特定操作),我可以调用反向路由器,它将指向默认值感谢您的慷慨解释-决定使用
路由中的单个声明(稍后切换到Scala!)注意:反向路由不应强制您从Java切换到Scala。如果你是Java极客,请留在Java,有关Scala视图的示例对于这两个方面都是相同的:Java和Scala版本as视图总是使用Scala构建的,因此你可以在构建路由时使用一些默认参数。顺便提一下,我发现了一个解决方法(可能不推荐),如果我在原始语句下面添加路由器-
/:namespace/:name controllers.Application.page\u view\u default(namespace:String,name:String)
(其中/:namespace/:name是重复的,page\u view\u default在控制器中声明,但不希望它执行任何特定操作),我可以调用反向路由器,它将指向默认值感谢您的慷慨解释-决定使用
路由中的单个声明(稍后切换到Scala!)注意:反向路由不应强制您从Java切换到Scala。如果您是Java极客,请留在Java,有关Scala视图的示例对于这两种视图都是相同的:Java和Scala版本as视图总是使用Scala构建的,因此您可以在构建路由时使用一些默认参数。