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

时间:2015-06-15 11:57:44

标签: 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."));
    }

}

但是当我更换这部分时:

public static Result index() {...

将“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()

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

3 个答案:

答案 0 :(得分:10)

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

来自documentation

  

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

     

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

     

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

     

routesGenerator:= InjectedRoutesGenerator

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

GET        /some/path        @controllers.Application.index()

答案 1 :(得分:5)

在Play 2.5中,默认使用注入的路由。如果您仍想使用静态路由,请将此添加到build.sbt:

routesGenerator := StaticRoutesGenerator

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

此处有更多详情:https://playframework.com/documentation/2.5.x/Migration25#Routes-generated-with-InjectedRoutesGenerator

答案 2 :(得分:1)

Play 2.4将默认路由生成器更改为InjectedRoutesGenerator以对路由使用依赖注入。至少tjhat是play-java模板中设置的内容。 如果您仍想使用静态方式,请在build.sbt文件中注释以下行

// Play provides two styles of routers, one expects its actions to be injected, the
// other, legacy style, accesses its actions statically.
//routesGenerator := InjectedRoutesGenerator

请参阅https://www.playframework.com/documentation/2.4.x/Migration24指南>依赖性注入>路由详情