エンジニアになりたい

立派なエンジニアに憧れるへっぽこエンジニアのメモ書き

Play Framework の Form でエラー

コントローラーで play.data.Form を使ってフォームを作って
テンプレートに渡したらエラーがでました。

[error] \controllers\Application.java:17: エラー: クラス indexのメソッド renderは指定された型に適用できません。
[error]                 return ok(index.render(form));
[error]                                ^
[error]   期待値: play.api.data.Form<hoge>
[error]   検出値: play.data.Form<hoge>
[error]   理由: 実引数play.data.Form<hoge>はメソッド呼出変換によってplay.api.data.Form<hoge>に変換できません

コントローラは Java で テンプレートは Scala なので何かあるんでしょう。
Java を使用する場合は Build.scala でメイン言語を Java に指定する必要があるようです。

こんな風に

import sbt._
import Keys._
import play.Project._

object ApplicationBuild extends Build {

    val appName         = "app-name"
    val appVersion      = "1.0"

    val appDependencies = Seq(
       javaCore, javaJdbc, javaEbean
    )

    val main = play.Project(appName, appVersion, appDependencies).settings(
      // Add your own project settings here      
    )

}

具体的には appDependencies の部分で javaCore が追加されていればメイン言語が Java になるようです。javaCore を追加したらエラーは解消しました。

  • 参考にしたサイト

http://stackoverflow.com/questions/16420128/actual-argument-play-data-form-cannot-be-converted-to-play-api-data-form
http://www.playframework-ja.org/documentation/2.1.2/Migration