2013-02-17 49 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

相關問題