Проверка существования числа в форме Play Scala

У меня есть форма, в которой ожидается число... Мне трудно проверить, было ли оно отправлено или нет, чтобы вернуть сообщение о том, что оно требуется, я пробовал следующие случаи, но ни один из них не работал:

"orderBy" -> number.verifying("The order is required",_.isInstanceOf[Int])

"orderBy" -> number.verifying("The order is required",_>0)

Любые идеи?


person Peter    schedule 22.12.2014    source источник


Ответы (1)


Если orderBy вообще не отправляется с Form, то он вернет FormError с ключом error.required.

Я предполагаю, что вы имеете в виду случай, когда вместо числа передается пустое String. Проблема с вашими попытками заключается в том, что функции verifying никогда не достигаются, потому что пустая String не проходит через валидатор number.

Единственное, что я могу придумать, это создать собственный Mapping[Int], который сначала проверяет, пусто ли поле, а затем проверяет, является ли оно допустимым Int.

val requiredNumber: Mapping[Int] = Forms.nonEmptyText
    .verifying("Must be numeric", i => Try(i.toInt).isSuccess || i.isEmpty)
    .transform[Int](_.toInt, _.toString)

И тестирование:

scala> val form = Form(mapping("orderBy" -> requiredNumber)(identity)(Some(_)))

scala> form.bind(Map("orderBy" -> "1")).value
res24: Option[Int] = Some(1)

scala> form.bind(Map("orderBy" -> "")).errors
res26: Seq[play.api.data.FormError] = List(FormError(orderBy,List(error.required),WrappedArray()))

scala> form.bind(Map("orderBy" -> "aa")).errors
res27: Seq[play.api.data.FormError] = List(FormError(orderBy,List(Must be numeric),WrappedArray()))

scala> form.bind(Map("orderByzzz" -> "2")).errors
res28: Seq[play.api.data.FormError] = List(FormError(orderBy,List(error.required),List()))
person Michael Zajac    schedule 22.12.2014