使用 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 IDEA 15 创建maven项目

如何将 IntelliJ 与 Play Framework 和 Scala 一起使用

PlayFramework 2.4 和 IntelliJ 14

IntelliJ IDEA 15 部署Tomcat及创建一个简单的Web工程

如何设置 sbt/scala/play 多模块项目,该项目将与 Intellij scala 插件一起正常工作