1

在我的路由器中,我有

GET    /:namespace/:name    controllers.Application.page_view(namespace: String, name: String, redirect:Boolean ?= true)

在我可以做的 URL 中,/main/home或者/main/name?redirect=0如果我想要默认值以外的东西。我想通过调用反向路由器来做类似的事情,但是例如:return redirect(routes.Application.page_view("main", "home")); 不起作用......我也需要在其中包含一个“true”(默认),可以拨打电话没有说明可选变量?

4

1 回答 1

1

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

return redirect(routes.Application.page_view("main", "home", true));

另一方面,在 Scala 驱动的视图中,您可以根据需要执行此操作,比较:

<pre>
    @(routes.Application.page_view("one", "two"))
    @(routes.Application.page_view("three", "four", true))
    @(routes.Application.page_view("five", "six", false))
</pre>

编辑

正如您指出的那样,也有可能使您的操作重载(但请注意,它不会重载 sensu stricto,因为对于路由解析器,您需要使用其他名称),如:

routes

GET     /:namespace/:name     controllers.Application.pageViewDefault(namespace: String, name: String)
GET     /:namespace/:name     controllers.Application.pageView(namespace: String, name: String, redirect: Boolean ?= true)

Controller

public static Result pageViewDefault(String namespace, String name) {
    return pageView(namespace, name, true);
}

public static Result pageView(String namespace, String name, boolean redirect) {
   if (redirect) //return some redirect...
   // in other case return a Result...
}

无论如何,我可以根据我的经验告诉你,从长远来看,它会让你感到不舒服:你需要记住每次(在控制器和视图中)如果你现在应该选择pageViewor pageViewDefault。恕我直言,更好的是,只需使用单个操作并记住在需要的地方添加默认重定向 - pageView(ns, n, true)vs pageView(ns, n, false)

同样使用您的方法,您需要记住*Default视图中的操作,而使用单个操作您将不会:

<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>

为了让生活更简单,只需在控制器中声明常量:

private static final boolean DEFAULT_REDIRECT = true;

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

返回重定向(routes.Application.pageView("main", "home", DEFAULT_REDIRECT));

此外,如果您将有很多带有可选redirect参数的操作,您将需要创建*Default操作 + 专用路由。

于 2013-03-23T22:59:01.097 回答