使用 Intellij 15 创建新 Play 应用程序时的控制器问题
Posted
技术标签:
【中文标题】使用 Intellij 15 创建新 Play 应用程序时的控制器问题【英文标题】:Controller issue when creating new Play application with Intellij 15 【发布时间】:2016-02-27 17:47:36 【问题描述】:我使用 Intellij 15 创建了一个新的 Play 应用程序。使用的 play 版本是 2.4.2,所以我在 migration guide 之后将其更新为 2.4.6。我将应用程序控制器更改为 Java 类,但现在出现以下错误:
Class 'Application' must either be declared abstract or implement abstract method 'RequestTimeout()' in 'Controller'
这是我的应用程序控制器的样子:
package controllers;
import play.api.mvc.Controller;
import play.api.mvc.Result;
public class Application extends Controller
public Result index()
return ok(views.html.index("Your new application is ready."));
我确实按照迁移指南的依赖注入部分中的建议将路由生成器 (routesGenerator := InjectedRoutesGenerator
) 添加到了我的 build.sbt
。
一些最后的笔记:
(1) 我将应用程序创建为 Scala Play 应用程序,因为当我尝试使用 Play 框架将其创建为 Java 应用程序时,IntelliJ 没有正确生成项目,而且我还是想使用 sbt。
(2) 我注意到Scala Application 控制器生成为object
而不是class
,表明它仍在使用静态路由;所以我猜它与依赖注入有关,但除了迁移指南中的步骤之外,我在他们的文档中看不到任何内容。
知道我错过了什么吗?
【问题讨论】:
【参考方案1】:您需要改用play.mvc.Controller
。换句话说,不要使用 api
包,因为它们仅用于 scala 项目。只需将您的代码更改为:
package controllers;
import play.mvc.Controller; // no .api.
import play.mvc.Result; // no .api.
public class Application extends Controller
public Result index()
return ok(views.html.index("Your new application is ready."));
关于你的笔记:
使用Activator创建项目,然后将它们导入IDEA。
Activator 可能会使用 DI 而不是 object
创建项目来定义控制器。无论如何,steps at the migration guide 足以迁移您的应用。
【讨论】:
谢谢,成功了。感谢您的提示,我完全忘记了 Activator。以上是关于使用 Intellij 15 创建新 Play 应用程序时的控制器问题的主要内容,如果未能解决你的问题,请参考以下文章
IntelliJ IntelliJ IDEA 15 创建maven项目
如何将 IntelliJ 与 Play Framework 和 Scala 一起使用
PlayFramework 2.4 和 IntelliJ 14