Как обрабатывать длинные и разные форматы в Play! Скала форма? - PullRequest
8 голосов
/ 25 марта 2012

В моей модели все связанные учетные записи Long не являются обычными целыми числами. Однако при обработке формы Scala в новой Play! 2.0 Я могу подтвердить только номер Int в форме, а не Long.

http://www.playframework.org/documentation/2.0/ScalaForms

Примите следующую форму:

val clientForm: Form[Client] = Form(
    mapping(
      "id" -> number,
      "name" -> text(minLength = 4),
      "email" -> optional(text),
      "phone" -> optional(text),
      "address" -> text(minLength = 4),
      "city" -> text(minLength = 2),
      "province" -> text(minLength = 2),
      "account_id" -> number
    )
    (Client.apply)(Client.unapply)
  )

Где вы видите account_id Я хочу применить Long, так как же я могу разыграть это самым простым способом? Синтаксис Client.apply удивителен своей простотой, но я открыт для таких опций, как сопоставление. Спасибо!

Ответы [ 2 ]

11 голосов
/ 25 марта 2012

Нашел действительно потрясающий способ сделать это, который, похоже, отсутствует в документации, которую я привел в вопросе.

Сначала включите Play!форматы: import play.api.data.format.Formats._

Затем при определении отображения формы используйте of[] синтаксис

, и тогда новая форма val будет выглядеть следующим образом:

val clientForm = Form(
    mapping(
      "id" -> of[Long],
      "name" -> text(minLength = 4),
      "address" -> text(minLength = 4),
      "city" -> text(minLength = 2),
      "province" -> text(minLength = 2),
      "phone" -> optional(text),
      "email" -> optional(text),
      "account_id" -> of[Long]
    )(Client.apply)(Client.unapply)
  )

Обновление: использованиеНеобязательно ()

После дальнейших экспериментов я обнаружил, что вы можете смешивать of[] с Play!optional для соответствия необязательным переменным, определенным в вашем классе.

Итак, предположим, что account_id выше является необязательным ...

"account_id" -> optional(of[Long])
7 голосов
/ 25 октября 2012

Предыдущий ответ определенно работает, но было бы лучше просто использовать то, что находится в import play.api.data.Forms._, поскольку вам уже нужно импортировать это для optional и text.

Так что вместо этого вы можете использоватьlongNumber.

val clientForm = Form(
  mapping(
    "id" -> longNumber,
    "name" -> text(minLength = 4),
    "address" -> text(minLength = 4),
    "city" -> text(minLength = 2),
    "province" -> text(minLength = 2),
    "phone" -> optional(text),
    "email" -> optional(text),
    "account_id" -> optional(longNumber)
  )(Client.apply)(Client.unapply)
)
...