【问题标题】:How to insert link to controller action in Play framework 2.0 template如何在 Play framework 2.0 模板中插入指向控制器操作的链接
【发布时间】:2012-09-16 14:12:31
【问题描述】:

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

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

【问题讨论】:

    标签: templates hyperlink playframework-2.0


    【解决方案1】:

    语法:

    <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"));
    }
    

    【讨论】:

      【解决方案2】:

      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());
          }
      }
      

      您的&lt;a&gt; 应如下所示:

      <a href="@routes.Products.index()">Products</a>
      

      另外:如果您的方法可以接受参数,那么您当然可以在方法的括号之间传递参数,如下所示:index("Hi")

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

      【讨论】:

      • 如果我的控制器在子包中怎么办?假设它在com.mycompany.myproduct.controllers.LoginController.index()
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2015-07-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-14
          • 1970-01-01
          相关资源
          最近更新 更多