2016-12-15 20 views
0

這有點奇怪,因爲Play框架堅持Java或Scala。在我的情況下,我想要Scala,但也想構建play-authenticate項目的頂部,該項目是作爲Play Java插件(而不是Scala)實現的。Play 2.5如何轉換Scala Form至Java Form?

嘗試遷移其使用樣品Scala和承擔大部分遷移到斯卡拉後,我碰上有斯卡拉play.api.data.Form類型的問題,需要通過對遊戲進行身份驗證框架的Java的play.data.Form類型。因此,我需要在這兩個單獨的(沒有共同的抽象或任何​​東西)類之間進行轉換。

我已經檢查了play.core.j.JavaHelpers的實現,但沒有什麼可以在兩個單獨的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 Forms。混合方法導致期望Scala play.api.data.Form類型的視圖中的問題,而不是Java play.data.Form類型,但支持此混合方法的解決方案是將PlayMagicForJava靜態上下文導入到受影響的視圖中。

相關問題