升级到 2.4 时播放框架表单类型不匹配

Posted

技术标签:

【中文标题】升级到 2.4 时播放框架表单类型不匹配【英文标题】:Play Framework Forms Type Mismatch When Upgrading to 2.4 【发布时间】:2016-09-02 09:09:48 【问题描述】:

将我的 Play Framework 从 2.3.6 升级到 2.4.8 时,我收到此运行时错误,我请求第一页。

type mismatch;
found   : play.api.data.Form[controllers.Account.PasswordData]
required: play.data.Form[controllers.Account.PasswordData]

与我的控制器中的这一行相关:

import play.api.data._

...

Ok(html.account.changePassword(passwordForm, "Change password", user))

在我看来这一行(password.scala.html):

@(passwordForm: Form[controllers.Account.PasswordData], title: String, user: User)(implicit flash: play.api.mvc.Flash)

现在看来 Play 在我导入时使用 play.data.Form 在视图中使用术语 Form。

解决此问题的最佳方法是什么?我应该将 play.api.data.Form 硬编码到视图中吗?或者将 Account.scala 中的 Form 对象更改为 play.data.Form?

play.api.data.Form和play.data.Form有什么区别?

谢谢!

【问题讨论】:

用这个“import play.data._”替换你的导入没有解决你的问题吗? 现在我正在尝试在模板文件中进行显式导入。还没有看到它是否有效。 我只是想知道是否有一些中心位置指定了默认导入? 【参考方案1】:

解决了。我不小心将 play 配置为使用 Java API。在 Java API 中,Form 类是 play.data.Form,但在 Scala API 中,它是 play.api.data.Form。

它是在这一行的 build.sbt 配置中完成的:

lazy val root = (project in file(".")).enablePlugins(PlayScala, PlayEbean)

【讨论】:

那你是在做一个Scala项目吧?不是Java??我以为是Java。 :)

以上是关于升级到 2.4 时播放框架表单类型不匹配的主要内容,如果未能解决你的问题,请参考以下文章

播放升级到 2.4 但无法获取 sbt-plugin

Apache 升级 2.2 -> 2.4 问题

播放 2.4 值 confDirectory 不是对象 play.PlayImport.PlayKeys 的成员

Grails从1.3升级到2.4

如何从实体框架 4 升级到 EF6?

ElasticSearch2.3/2.4升级到ElasticSearch5.0