15

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

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

intelliJ 中显示的错误是“无法解析方法 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));
}

它无法解析索引方法。

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

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

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

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

4

8 回答 8

37

文件->项目结构

在右窗格中选择

添加源文件夹

目标/scala-XXX/classes_managed

目标/scala-XXX/src_managed/main

于 2014-02-19T11:39:07.990 回答
22

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

简而言之:

  • 创建目录javascriptref在控制器包下
  • 运行activator compile,现在 Intellij 应该得到它 // 曾经是 'play compile'
  • 如果仍然出现错误,请尝试activator idea再次运行 // 以前是“play compile”*
于 2013-07-11T11:05:34.527 回答
6

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

概要:将 target/scala-XXX 添加为托管源并删除 File->Project Structure->Modules->Sources 中的应用程序控制器和视图源标志。然后重新编译。

适用于 IntelliJ Ultimate 12.1。{4|6}。使用命令行界面创建播放应用程序并使用play idea. 使用 Play 2.2.0。

于 2013-10-29T02:21:40.473 回答
4

对于 IntelliJ 14.1 和 Play 2.3.8,上述方法均无效,但此邮件列表中的建议有效。(几乎)公然抄袭:

在项目视图中找到 target/scala-2.11/src_managed 和 target/scala-2.11/twirl 目录,然后右键单击并 Mark Directory As -> Generated Sources (Root)

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

于 2015-04-08T13:30:25.783 回答
4

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

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

于 2016-03-27T17:08:01.850 回答
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.*;
于 2014-06-09T12:52:32.540 回答
0

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

于 2015-08-29T21:27:13.590 回答
0

我没有在我的 PLay 2.8 版本中找到这些文件夹,所以这是 IntelliJ 的问题,我找到了一个更简单的解决方案:

https://stackoverflow.com/a/70339356/2367237

于 2021-12-13T18:33:26.623 回答