起初我有这个链接到推特图标:
@{'/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
答案 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");