23

我目前通过以下方式获取相对 url 路由作为字符串:

String url = controllers.directory.routes.Directory.viewOrganisation( org.id ).url();

这很好用,但是我想获得完整的绝对网址。我相信这很简单,我似乎找不到它。

或者,如何在视图中获取当前域以添加到相对 url?

4

2 回答 2

24

确实很简单,并且在堆栈上也得到了回答

遵循这个问题:如何从 Play 2 Java 上的路由反向生成绝对 URL?

一般来说,您需要:

routes.MyController.myMethod().absoluteURL(request());
于 2012-09-25T18:17:11.107 回答
8

对于 Scala 程序员:在 Play 2.2.x 中,absoluteURL 以这种方式重载:

def absoluteURL(secure: Boolean = false)(implicit request: RequestHeader): String

所以如果你只写

routes.MyController.myMethod().absoluteURL(request)

你会得到一个错误:

Overloaded method value [absoluteURL] cannot be applied to (play.api.mvc.Request[play.api.mvc.AnyContent])

有两种选择。您可以将请求声明为隐式:

def myMethod() = Action { implicit request =>
    ...
}

并完全摆脱参数(你可以这样做,因为另一个有默认值):

routes.MyController.myMethod().absoluteURL()

或者您必须明确指定这两个参数。

我在这里写这个答案,因为问题是“如何在 Play 框架 2 中将绝对路由 url 作为字符串获取”,并且接受的答案仅适用于 Java。Scala 版本有它的细微差别。

于 2014-01-31T13:15:17.533 回答