2013-02-17 105 views
1

我使用PlayFramework 2.1和Scala作为主要语言。Play Framework 2 /如何确保表单输入日期的4位数的年份?

我有一个输入日期的网络表单。 我想强制用户输入此模式后的日期: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位数的预期模式?

回答

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.minYearerror.minYearmessages文件。

+0

好的解决方案:) – Mik378 2013-02-17 20:34:24

+0

我建议用'Constraint [Date](“constraint.minYear”)'替换'Constraint [Date](“constraint.minYear”,minYear)''。 “minYear”将被视为关闭的一部分。 – Mik378 2013-02-17 21:13:33

+0

'Contraint'的Play Framework文档声明'@参数指定消息参数,以格式化约束名称。我使用的构造与[Validation.scala]中的可用默认验证完全相同(https://github.com/playframework/Play20/blob/2.1.0/framework/src/play/src/main/scala /play/api/data/validation/Validation.scala)文件。 – EECOLOR 2013-02-17 21:18:07

相关问题