sch*_*mmd 10 scala playframework playframework-2.0
我理解如何在Play 2中添加简单的表单验证nonEmptyText,但是如何实现更复杂的验证,例如"必须至少定义一个字段"?现在我在我的模型对象中抛出异常,如果它被所有Nones 初始化,但这会产生一个讨厌的错误消息.我希望在表单页面上收到一条友好的错误消息.
您可以在表单定义中嵌套mappings/ tuples并verifying在映射,子映射,元组和子元组上添加规则.然后,在模板中,您可以使用form.errors("fieldname")特定字段或字段组检索错误.
例如 :
val signinForm: Form[Account] = Form(
mapping(
"name" -> text(minLength=6, maxLength=50),
"email" -> email,
"password" -> tuple(
"main" -> text(minLength=8, maxLength=16),
"confirm" -> text
).verifying(
// Add an additional constraint: both passwords must match
"Passwords don't match", password => password._1 == password._2
)
)(Account.apply)(Account.unapply)
)
Run Code Online (Sandbox Code Playgroud)
如果您有两个不同的密码,则可以使用以下方法检索模板中的错误 form.errors("password")
在这个例子中,你必须自己编写Account.apply并Account.unapply处理(String, String, (String, String))
我已经改进了@ kheraud接受的答案.您可以将元组转换回单个字符串.这允许您使用默认的apply/unapply函数.
示例:
val signinForm: Form[Account] = Form(
mapping(
"name" -> text(minLength=6, maxLength=50),
"email" -> email,
"password" -> tuple(
"main" -> text(minLength=8, maxLength=16),
"confirm" -> text
).verifying(
// Add an additional constraint: both passwords must match
"Passwords don't match", password => password._1 == password._2
).transform(
{ case (main, confirm) => main },
(main: String) => ("", "")
)
)(Account.apply)(Account.unapply)
)
Run Code Online (Sandbox Code Playgroud)