0

Play フレームワークでは、Java または Scala のいずれかに固執するため、これは少し奇妙な状況です。私の場合、Scala が必要ですが、 (Scala ではなく) Play Java プラグインとして実装されているplay-authenticateプロジェクトの上に構築したいと考えています。

使用例を Scala に移行しようとして、Scala への移行のほとんどを行った後、Scalaplay.api.data.Form型の問題に遭遇し、play-authenticate フレームワーク Java のplay.data.Form型に渡す必要があります。したがって、これら 2 つの別個の (共通の抽象化などがない) クラス間の変換が必要です。

すでにplay.core.j.JavaHelpers実装を確認しましたが、2 つの別々Formの型の間で変換するものはありません。私は手動でそれを行うことができましたが、それはメンテナンス料金であり、誰かがすでにこれにぶつかったのか、どのように解決されたのか疑問に思っていましたか?

更新次のように試しPlayMagicForJavaましたが、魔法はありませんでした:X

import javax.inject.{Inject, Singleton}

import play.api.data.Forms._
import play.api.i18n.Messages
import play.api.mvc.RequestHeader

case class Signup(email: String, password: String, repeatPassword: String, username: String)

@Singleton
class SignupForm @Inject() (implicit val request: RequestHeader, messages: Messages) {
  import play.core.j.PlayMagicForJava._

  val Instance : play.data.Form[Signup] = play.api.data.Form {
    mapping(
      "email" -> email,
      "password" -> nonEmptyText(minLength = 5),
      "repeatPassword" -> nonEmptyText(minLength = 5),
      "username" -> nonEmptyText()
    )(Signup.apply)(Signup.unapply).
      verifying(messages("playauthenticate.password.signup.error.passwords_not_same"),
        data => data.password != null && !data.password.isEmpty && data.password.equals(data.repeatPassword))
  }
}

そしてエラー:

[error] SignupForm.scala:16: type mismatch;
[error]  found   : play.api.data.Form[views.form.Signup]
[error]  required: play.data.Form[views.form.Signup]
[error]       val Instance : play.data.Form[Signup] = Form {
4

1 に答える 1