14

如果我有一个 action Application.show(tag: String),并且也有一个相应的路由条目,如何在不手动制作 url 的情况下将此 action 的链接插入到模板?

我想做类似的事情magiclink(Application.show("tag"))

4

4 回答 4

19

句法:

<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"));
}
于 2012-09-16T14:43:52.127 回答
5

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").

我希望这个答案更清楚易懂。

于 2015-08-19T13:31:27.993 回答
3

啊,就这么简单@{routes.Application.show("tag")}

于 2012-09-16T14:17:54.730 回答
3

接受的答案是正确的,但它不包括控制器在子包中的情况,即: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注释,这看起来确实是一个非常奇怪的错误。它可能会让您质疑您是否正确构建了项目。确定真正的原因可能会花费你大量的鲜血和财宝。

于 2017-11-27T23:47:15.947 回答