如何反向路由静态文件?

时间:2011-09-08 09:03:54

标签: java playframework

起初我有这个链接到推特图标:

@{'/public/images/twitter-icon.png'/}

但是现在我想根据类型显示Twitter,Facebook或LinkedIn图标。所以,我创建了一个FastTag,它将类型作为参数,代码如下所示:

In the view:
#{myApp.icon contact.type/}

FastTag Java Code:
String type = (String) args.get("arg");
out.print("/public/images/" + type + "-icon.png");

工作正常。但是,在我们的构建服务器上,我们运行应用程序在uri上添加前缀

http://ourdomain.com/appname/...

显然/ public / images ...在这里不起作用。所以我想我必须要求路由器提供正确的地址。我试过以下但没有成功:

Router.reverse("/public/images/" + type + "-icon.png");
Router.reverse("/public/");
Router.reverse("staticDir:public");

这三个都导致NoRouteFoundException。如何为我的图标找到正确的路线?

在路线文件中,我有静态文件的默认路径

GET     /public/        staticDir:public

3 个答案:

答案 0 :(得分:9)

我相信这就是你想要的:

String imageUrl = Router.reverse(VirtualFile.fromRelativePath("public/images/" + type + "-icon.png"));

答案 1 :(得分:0)

使用Router.reverse生成URL表单一个动作! 也许你可以定义一个包含你的应用名称和路由一个动作的路线,例如:

GET / appname / public / TestController.test

现在,您可以使用

Router.reverse( “TestController.test”)

获取网址。

答案 2 :(得分:0)

我认为做以下事情会更好:

GET      /img/     staticDir:public/images

在模板中只是:

out.print("/img/" + type + "-icon.png");