如果我有一个 action Application.show(tag: String)
,并且也有一个相应的路由条目,如何在不手动制作 url 的情况下将此 action 的链接插入到模板?
我想做类似的事情magiclink(Application.show("tag"))
。
如果我有一个 action Application.show(tag: String)
,并且也有一个相应的路由条目,如何在不手动制作 url 的情况下将此 action 的链接插入到模板?
我想做类似的事情magiclink(Application.show("tag"))
。
句法:
<a href='@routes.Application.show("some")'>My link with some string</a>
以此类推,您还可以在控制器中生成 url。IE。在某些操作后重定向:
public static Result justRedirect(){
// use as String
String urlOfShow = routes.Application.index().toString().
// or pass as a redirect() arg
return redirect(routes.Application.show("some"));
}
将routes
文件中的 URL 放入 html 的格式如下:
@routes.NameOfYourClass.nameOfyourMethod()
因此,如果在您的routes
文件中,您有:
GET /products controllers.Products.index()
你的Products
班级看起来像这样:
public class Products extends Controller {
public Result index() {
return ok(views.html.index.render());
}
}
你<a>
应该是这样的:
<a href="@routes.Products.index()">Products</a>
另外:如果您的方法可以接受参数,那么您当然可以在方法的括号之间传递它们,如下所示: index("Hi")
.
我希望这个答案更清楚易懂。
啊,就这么简单@{routes.Application.show("tag")}
。
接受的答案是正确的,但它不包括控制器在子包中的情况,即:controllers.applications.MyFavouriteApplication.show()
由于我很难找到答案,所以我会在这里发布。
要将非范围链接放入模板,正确的模式是@controllers.{sub-packages if any}.routes.{your class}.{your method}()
所以在这种情况下@controllers.applications.routes.MyFavouriteApplication.show()
如果您使用推荐的 Play 模式@Inject
来创建单例控制器对象,并且如果您认为正确的答案是@controllers.applications.MyFavouriteApplication.show()
,您将收到如下错误:
Object MyFavouriteApplication is not a member of controllers.applications. Note: class MyFavouriteApplication exists, but it has no companion object.
鉴于您已经提供了@Inject()
@Singleton
注释,这看起来确实是一个非常奇怪的错误。它可能会让您质疑您是否正确构建了项目。确定真正的原因可能会花费你大量的鲜血和财宝。