我尝试使用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
答案 0 :(得分:10)
您可能仍在使用旧式路由。
注入路线生成器 默认情况下,Play将生成静态路由器,该路由器假定所有操作都是静态方法。通过配置Play以使用注入的路由生成器,您可以获得Play以生成路由器,该路由器将声明它所路由的所有控制器作为依赖项,从而允许您的控制器自己依赖注入。
我们建议始终使用注入路由生成器,静态路由生成器主要作为辅助迁移的工具存在,这样现有项目就不必一次使所有控制器都不是静态的。
要启用注入的路由生成器,请将以下内容添加到build.sbt中的构建设置:
routesGenerator:= InjectedRoutesGenerator
或者,您可以坚持使用静态路由器(但如果您正在创建新的应用程序,为什么会这样?)并在操作引用前加上@
GET /some/path @controllers.Application.index()
答案 1 :(得分:5)
在Play 2.5中,默认使用注入的路由。如果您仍想使用静态路由,请将此添加到build.sbt:
routesGenerator := StaticRoutesGenerator
@controllers.…
符号对我不起作用。
答案 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指南>依赖性注入>路由详情