Scala Play 表单日期验证
Scala Play form date validation
我正在使用 Scala Play 2。5.x 并且我正在尝试进行一些日期验证。用户可以使用此表单搜索项目,以及日期范围选项:fromDate
和 toDate
。
val searchForm = Form(
mapping(
"itemID" -> nonEmptyText,
"fromDate" -> optional(date),
"toDate" -> optional(date),
"type" -> optional(text),
"itemClass" -> optional(text),
"status" -> optional(text),
"component" -> nonEmptyText
)(SearchModel.apply)(SearchModel.unapply) verifying("To Date must be greater than From Date", f => f.toDate > f.fromDate))
Play 已经涵盖了格式验证,但问题是 toDate
需要大于 fromDate
,如果输入其中一个日期,另一个也必须被输入。
如何在表单中实现这些条件?我是否应该在 view
、controller
或 case class
等其他地方进行此验证?
您可以使用 .verifying
在表单上添加验证
val searchForm = Form(
mapping(
"itemID" -> nonEmptyText,
"fromDate" -> optional(date).verifying("Invalid Date", date => true /* any condition or a function which checks the date condition*/),
"toDate" -> optional(date),
"type" -> optional(text),
"itemClass" -> optional(text),
"status" -> optional(text),
"component" -> nonEmptyText
)(SearchModel.apply)(SearchModel.unapply)
供参考:-
https://www.playframework.com/documentation/2.5.x/ScalaForms#Defining-ad-hoc-constraints
我希望这就是你所要求的。
为了实现您的验证需求,您可以将其保留在您的表单定义中并添加另一个 verifying
:
val searchForm = Form(
mapping(
"itemID" -> nonEmptyText,
"fromDate" -> optional(date),
"toDate" -> optional(date),
"type" -> optional(text),
"itemClass" -> optional(text),
"status" -> optional(text),
"component" -> nonEmptyText
)(SearchModel.apply)(SearchModel.unapply)
verifying("You must provide zero or both dates", f => f.toDate.isEmpty && f.fromDate.isEmpty || f.toDate.isDefined && f.fromDate.isDefined)
verifying("To Date must be greater than From Date", f => if (f.toDate.isDefined && f.fromDate.isDefined) f.toDate.get > f.fromDate.get else true)
)
我正在使用 Scala Play 2。5.x 并且我正在尝试进行一些日期验证。用户可以使用此表单搜索项目,以及日期范围选项:fromDate
和 toDate
。
val searchForm = Form(
mapping(
"itemID" -> nonEmptyText,
"fromDate" -> optional(date),
"toDate" -> optional(date),
"type" -> optional(text),
"itemClass" -> optional(text),
"status" -> optional(text),
"component" -> nonEmptyText
)(SearchModel.apply)(SearchModel.unapply) verifying("To Date must be greater than From Date", f => f.toDate > f.fromDate))
Play 已经涵盖了格式验证,但问题是 toDate
需要大于 fromDate
,如果输入其中一个日期,另一个也必须被输入。
如何在表单中实现这些条件?我是否应该在 view
、controller
或 case class
等其他地方进行此验证?
您可以使用 .verifying
在表单上添加验证 val searchForm = Form(
mapping(
"itemID" -> nonEmptyText,
"fromDate" -> optional(date).verifying("Invalid Date", date => true /* any condition or a function which checks the date condition*/),
"toDate" -> optional(date),
"type" -> optional(text),
"itemClass" -> optional(text),
"status" -> optional(text),
"component" -> nonEmptyText
)(SearchModel.apply)(SearchModel.unapply)
供参考:- https://www.playframework.com/documentation/2.5.x/ScalaForms#Defining-ad-hoc-constraints
我希望这就是你所要求的。
为了实现您的验证需求,您可以将其保留在您的表单定义中并添加另一个 verifying
:
val searchForm = Form(
mapping(
"itemID" -> nonEmptyText,
"fromDate" -> optional(date),
"toDate" -> optional(date),
"type" -> optional(text),
"itemClass" -> optional(text),
"status" -> optional(text),
"component" -> nonEmptyText
)(SearchModel.apply)(SearchModel.unapply)
verifying("You must provide zero or both dates", f => f.toDate.isEmpty && f.fromDate.isEmpty || f.toDate.isDefined && f.fromDate.isDefined)
verifying("To Date must be greater than From Date", f => if (f.toDate.isDefined && f.fromDate.isDefined) f.toDate.get > f.fromDate.get else true)
)