【问题标题】:Scala: Play: Action classes — import behavior changed from Play 2.4 to Play 2.8Scala:Play:Action 类——导入行为从 Play 2.4 更改为 Play 2.8
【发布时间】:2020-12-27 18:46:28
【问题描述】:

我正在使用 Play 2.8.7、Scala 2.13.4。

import play.api.mvc._
import play.api.mvc.Results._
import play.mvc.Controller
import play.api.i18n.{I18nSupport, MessagesApi}
import javax.inject._

class Application @Inject() (
  val messagesApi: MessagesApi
) extends Controller with I18nSupport {

  def greeting = Action { implicit request =>
    Ok("hello")
  }
}

1.我要导入play.api.mvc.Results.Ok——为什么我只做import play.api.mvc.Results._时才导入,而我只做import play.api.mvc._时不导入? 后者在我使用 Play 2.4.3 (Scala 2.11.11) 时可以工作。

2. 编译器无法解析符号“Action”。这是为什么...?我做了import play.api.mvc._

更新:

有人建议导入play.mvc.BaseController

Play 2.8.7中似乎不存在。

【问题讨论】:

  • 我很确定这与 Scala 版本无关。您基本上升级了 Play 框架的4 次要版本,很多事情可能已经改变。我建议您查看更改日志并编辑此问题的标题,以便更清晰。
  • 代码很基础,所以不是想升级它,更像是用2.8写,然后和2.4比较……我写的时候确实试着按照Play 2.8的文档. playframework.com/documentation/2.8.x/ScalaActionsComposition你觉得更好的标题是什么?
  • 类似 "Play: 结果代码导入从 2.4 更改为 2.8".
  • 好的,更新了。

标签: scala playframework


【解决方案1】:

“Controller”用于Java,所以你应该在Scala中使用“play.mvc.BaseController”。

如果您使用“play.mvc.BaseController”,Q1 和 Q2 都将得到解决。 "import play.api.mvc.Results._" 也是不必要的。

【讨论】:

  • 实际上,使用 Play 2.8.7 和 play.mvc.BaseController,我得到了 type BaseController is not a member of package play.mvc。当我尝试play.api.mvc.BaseController 我得到Class 'Application' must either be declared abstract or implement abstract member 'controllerComponents: ControllerComponents' in 'play.api.mvc.BaseControllerHelpers'
  • 你能分享一个可以重现错误的最小项目吗?
  • 我想我可以,但首先看看我对我的问题所做的更新。你能在你的Play 2.8.7副本中找到play.mvc.BaseController吗?
  • 对不起。这是错字。我正在查看官方文档中链接的示例项目。代码如下: package controllers import javax.inject._ import play.api._ import play.api.mvc._ @Singleton class HomeController @Inject()(val controllerComponents: ControllerComponents) extends BaseController { def index() = Action { 隐式请求:Request[AnyContent] => Ok(views.html.index()) } }
  • 您查看的官方文档页面的链接是什么?
【解决方案2】:

导入 play.mvc.Controllerplay.mvc.Result 并将您的类扩展到 Controller

例子:

import play.mvc.Controller;
import play.mvc.Result;

public class ClassName extends Controller { 

  //code

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 2015-10-08
    • 2015-10-08
    • 2015-09-22
    • 1970-01-01
    相关资源
    最近更新 更多