Play Framework 2.4不接受控制器的"公共静态结果"

Ale*_*nar 6 java playframework

我尝试使用Play Framework 2.4和Mac中的JDK8启动应用程序,当我使用./activator下载基础时新建项目播放-java模板代码包含下一个:

项目/应用/ controlles/Application.java

package controllers;

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

import views.html.*;

public class Application extends Controller {

    public Result index() {
        return ok(index.render("Your new application is ready."));
    }

}
Run Code Online (Sandbox Code Playgroud)

但当我更换这部分时:

public static Result index() {...
Run Code Online (Sandbox Code Playgroud)

将"static"添加到index()

我收到这个错误

Compilation error
value index is not a member of controllers.Application
.../conf/routes:6
4 # ~~~~
5 # Home page
6 GET     /                           controllers.Application.index()
Run Code Online (Sandbox Code Playgroud)

我不知道为什么因为在所有的例子中都使用了static for Result

Ste*_*ner 10

您可能仍在使用旧式路由.

文档:

注入路由生成器默认情况下,Play将生成静态路由器,该路由器假定所有操作都是静态方法.通过配置Play以使用注入的路由生成器,您可以获得Play以生成路由器,该路由器将声明其路由到的所有控制器作为依赖项,从而允许您的控制器自己依赖注入.

我们建议始终使用注入路由生成器,静态路由生成器主要用作辅助迁移的工具,以便现有项目不必一次使所有控制器都不是静态的.

要启用注入的路由生成器,请将以下内容添加到build.sbt中的构建设置:

routesGenerator:= InjectedRoutesGenerator

或者,你可以坚持使用静态路由器(但如果你正在创建一个新的应用程序,为什么会这样?)并在动作参考前加上@

GET        /some/path        @controllers.Application.index()
Run Code Online (Sandbox Code Playgroud)


sta*_*air 5

在Play 2.5中,默认使用注入路线。如果仍然要使用静态路由,请将其添加到build.sbt中:

routesGenerator := StaticRoutesGenerator
Run Code Online (Sandbox Code Playgroud)

@controllers.…符号对我不起作用。

此处有更多详细信息:https : //playframework.com/documentation/2.5.x/Migration25#Routes-Generated-with-InjectedRoutesGenerator