1

我使用 PlayFramework 2.1 和 Scala 作为主要语言。

我有一个带有输入日期的网络表单。我想强制用户按照这种模式输入日期:dd/MM/yyyy.

因此,我在控制器中精确了这样的模式:

 val myForm = Form(
    mapping(
      "date" -> date("dd/MM/yyyy")
    )(MyModel.apply)(MyModel.unapply)
  )

然而,类似模式也dd/mm/yyy被接受......例如:17/02/201而不是17/02/2013. 相反,dd/mm不接受,我所期望的。

是否有一种有效且干净的方法来保证全年 4 位数的预期模式?

4

1 回答 1

3

我会从稍微不同的角度来看待它。您可能希望确保年份大于 999(甚至更高)。

为此,您需要verify映射。为此,您可以创建Constraint与此类似的:

def minYear(minYear: Int): Constraint[Date] = 
  Constraint[Date]("constraint.minYear", minYear) { o =>
    if (o.getYear >= minYear) Valid
    else Invalid(ValidationError("error.minYear", minYear))
  }

然后你可以像这样使用它:

val myForm = Form(
  mapping(
    "date" -> date("dd/MM/yyyy").verifying(minYear(999))
  )(MyModel.apply)(MyModel.unapply)
)

不要忘记将constraint.minYear和添加error.minYear到您的messages文件中。

于 2013-02-17T16:20:47.643 回答