不,在 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...
}
无论如何,我可以根据我的经验告诉你,从长远来看,它会让你感到不舒服:你需要记住每次(在控制器和视图中)如果你现在应该选择pageView
or 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
操作 + 专用路由。