Если 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