Проверка существования числа в форме Play Scala
У меня есть форма, где ожидается число... Мне трудно проверить, было ли оно отправлено или нет, чтобы вернуть сообщение о том, что оно требуется, я пробовал следующие случаи, но ни один из них не работал:
"orderBy" -> number.verifying("The order is required",_.isInstanceOf[Int])
"orderBy" -> number.verifying("The order is required",_>0)
Есть идеи?
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()))