2016-12-15 14 views
0

Playフレームワークでは、JavaまたはScalaのいずれかに固執するため、これはちょっと変わった状況です。私の場合、スカラが必要ですが、ScalaではなくPlay Javaプラグインとして実装されているplay-authenticateプロジェクトのトップを構築したいと考えています。Play 2.5 ScalaフォームをJavaフォームに変換する方法は?

使用サンプルをScalaに移行しようとしたが、Scalaへの移行のほとんどを行った後、私はScala play.api.data.Form型を持っていて、play-authenticateフレームワークJavaのplay.data.Form型に渡す必要があるという問題にぶつかった。したがって、私はこれらの2つの別々の(共通の抽象化も何もない)クラス間の変換が必要です。

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

UPDATE次のように私は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 { 
+0

「PlayMagicForJava'''を使用しなければならないことが分かりました。ここでは、ドキュメント:https://www.playframework.com/documentation/2.3.x/api/scala/index.html#play.core .j.PlayMagicForJava $ すべてのフィールドを手動で変換し、新しいScalaフォームを作成します。 –

+0

どこか要点はありますか?それをするのに関係する音... –

答えて

0

非常に残念な唯一の方法は、再生するために、影響を受けたフォームを書き換えることでしたJavaフォーム。ハイブリッドアプローチでは、Scala play.api.data.Formタイプで、Java play.data.Formタイプではないと予想されるビューの問題が発生しますが、このハイブリッドアプローチをサポートするソリューションは、影響を受けるビューにPlayMagicForJavaの静的コンテキストをインポートすることでした。

関連する問題