Play 2.5 Как конфертировать из формы Scala в форму Java?

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

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

Я уже проверил 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 {

1 ответ

Решение

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

Другие вопросы по тегам