无法解析IntelliJ中的反向路由方法

时间:2013-05-21 17:46:14

标签: java intellij-idea playframework-2.0

我正在关注其中一个游戏框架教程,但每当我尝试使用反向路由时,我都会遇到编译错误。首先,

public static Result javascriptRoutes() {
    response().setContentType("text/javascript");
    return ok(
        Routes.javascriptRouter("jsRoutes",
            controllers.routes.javascript.Projects.add(),
            controllers.routes.javascript.Projects.delete(),
            controllers.routes.javascript.Projects.rename(),
            controllers.routes.javascript.Projects.addGroup()
        )
    );
}

其中intelJ中显示的错误是'无法解析方法javascriptRouter(java.lang.String,?,?,?,?)'

但也在单元测试中:

@Test
public void notAuthenticated() {
    Result result = callAction(
            controllers.routes.ref.Application.index(),
            fakeRequest()
    );
    assertEquals(303, status(result));
    assertEquals("/login", header("Location", result));
}

无法解析索引方法。

这是smartJ的问题,还是我在游戏中遗漏了什么?

对于第一部分,这是我的路线文件中的条目:

GET     /assets/javascripts/routes  controllers.Application.javascriptRoutes()

我的控制器Projects已经定义了方法。

7 个答案:

答案 0 :(得分:37)

档案 - > 项目结构

在右窗格中选择来源

添加源文件夹

目标/阶-XXX / classes_managed

目标/阶-XXX / src_managed /主

答案 1 :(得分:22)

我遇到了同样的问题并在此处找到了解决方案:https://github.com/playframework/Play20/issues/969

简而言之:

  • 在控制器包
  • 下创建目录javascriptref
  • 运行activator compile,现在Intellij应该 //以前是'play compile'
  • 如果您仍然遇到错误,请尝试再次运行activator idea //曾经是'play compile'*

答案 2 :(得分:6)

从@Markus Kittig提供的链接中拉出。很棒的临时修复。 https://github.com/playframework/playframework/issues/1784#issuecomment-26345523

梗概: 添加target / scala-XXX作为托管源,并删除文件 - >项目结构 - >模块 - >源中的应用程序控制器和视图源标志。然后重新编译。

适用于IntelliJ Ultimate 12.1。{4 | 6}。使用命令行界面创建播放应用程序,并使用play idea生成项目文件。使用Play 2.2.0。

答案 3 :(得分:4)

使用IntelliJ 14.1和Play 2.3.8,上述任何内容都无效,但是mailing list的建议有效。 (几乎)公然复制:

  

找到target / scala-2.11 / src_managed和target / scala-2.11 / twirl   在项目视图中的目录,然后右键单击并标记目录   作为 - >生成的源(根)

我碰到了scala版本,显然在更新版本的IntelliJ中添加了 Root 字。此外,您无法从“项目结构”窗口中选择此选项,该选项不可用。只能通过主窗口中的Project窗格进行操作。如果拒绝将其标记为Generated Sources,请尝试取消标记target目录(标记目录为 - >取消标记)。

答案 4 :(得分:2)

对于使用Play 2.4.x或更高版本的用户,似乎Play不再为src_managed等人中的javascript生成反向路由文件。

相反,您需要将scala-2.xx/routes/main目录包含为Sources

答案 5 :(得分:1)

这个问题是在一年前提出的,但为了回答其他编码人员未来的查询,通过添加像这样的“play.Routes”路径可以轻松解决问题

public static Result javascriptRoutes() {
    response().setContentType("text/javascript");
    return ok(
            play.Routes.javascriptRouter("jsRoutes",

                    // Routes for Projects
                    controllers.routes.javascript.Projects.add(),
                    controllers.routes.javascript.Projects.delete(),
                    controllers.routes.javascript.Projects.rename(),
                    controllers.routes.javascript.Projects.addGroup()
            )
    );

}

确保您拥有适当的类导入:

import play.mvc.*;
import play.data.*;

答案 6 :(得分:0)

我正在使用Idea 14.1.4社区版,我设法通过右键单击目标文件夹并将其标记为未排除来删除索引并路由未解决的错误。注意我使用命令行运行我的项目我在ide中找不到任何运行配置。