Играть 2.5 Как преобразовать форму Scala в форму Java?

Это немного странная ситуация, потому что с фреймворком Play вы придерживаетесь либо Java, либо Scala. В моем случае я хочу Scala, но также хочу построить поверх проекта play-authenticate. который реализован как плагин Play Java (а не Scala).

Пытаясь перенести их образец использования на Scala и после выполнения большей части миграции на Scala, я столкнулся с проблемой наличия типов play.api.data.Form Scala и необходимости перехода к типу play.data.Form среды воспроизведения-аутентификации Java. Поэтому мне нужно преобразование между этими двумя отдельными классами (без общей абстракции или чего-то еще).

Я уже проверил реализацию play.core.j.JavaHelpers, но нечего конвертировать между двумя отдельными типами 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 {

person SkyWalker    schedule 15.12.2016    source источник
comment
Насколько я знаю, вы должны использовать PlayMagicForJava Вот документация: playframework.com/documentation/2.3.x/api/scala/ Преобразуйте все поля вручную и создайте новую форму Scala.   -  person λ Allquantor λ    schedule 15.12.2016
comment
Где-то есть суть? звуки, участвующие в этом...   -  person SkyWalker    schedule 16.12.2016


Ответы (1)


К сожалению, единственным способом было переписать затронутые формы для воспроизведения Java-форм. Гибридный подход приводит к проблемам в представлениях, которые ожидают типы play.api.data.Form Scala, а не типы play.data.Form Java, но решение для поддержки этого гибридного подхода состояло в том, чтобы импортировать PlayMagicForJava статический контекст в затронутые представления.

person SkyWalker    schedule 16.12.2016