我了解如何在Play 2中添加简单表单验证,例如nonEmptyText
,但是我将如何实施更复杂的验证,例如“至少必须定义一个字段”?目前我在模型对象中抛出一个异常,如果它被所有的None
初始化,但是这会产生一个令人讨厌的错误信息。我希望在表单页面上获得友好的错误消息。如何在Play 2中指定复杂的表单验证?
回答
您可以窝在你的表单定义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)
)
如果你有两个不同的密码,你可以在你的模板检索错误使用form.errors("password")
在这个例子中,你将不得不写自己的Account.apply
和Account.unapply
以处理(String, String, (String, String))
酷,但不幸的是,这也意味着帐户不能成为案例类。我认为案例类不能重新定义不适用。 – schmmd 2012-05-11 20:43:45
@schmmd其实Account.apply是case类的伴侣对象的一种方法 - > http://daily-scala.blogspot.fr/2009/09/companion-object.html。你可以自己写。 – iwalktheline 2012-05-12 14:32:37
当然,但我的问题是“不适用”而不是“适用”。 – schmmd 2012-05-14 04:16:05
在玩!框架,你可以通过使用flash变量来显示友好的错误信息。你只需要写一些像;
flash.error("Oops. An error occurred");
给你的控制器。例如,这个错误信息将驻留在html页面上;
<h1>${flash.error}</h1>
玩!框架会将错误消息放在找到这个$ {flash.error}的地方。
我改进了@ 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)
)
- 1. Rails复杂表单验证?
- 2. 复杂的表单POST和验证
- 3. 表单验证复杂型是无效
- 4. 在Play Framework 2.x中手动调用表单验证
- 5. jQuery的表单验证:验证脚本指定外部
- 6. 角:表单验证和定制指令
- 7. 复杂表单验证(禁用对子对象属性的验证)
- 8. Symfony 2表单验证
- 9. 如何在发生表单验证错误时指定它们?
- 10. MVC ModelState验证复杂属性列表
- 11. Symfony 2中的动态表单验证
- 12. 在复杂模型上验证多页表单
- 13. 在Play Framework 2中自定义验证消息
- 14. Symfony 2表单验证组
- 15. 用户表单的复杂公式(2)
- 16. 复杂的教条查询表单验证帮助!
- 17. 什么是验证复杂Flex表单的最佳方式?
- 18. jQuery复杂验证规则
- 19. ASP.NET MVC:如何使用指定的UpdateTargetID验证Ajax表单?
- 20. 我可以在Play Framework 2.x(Scala)中进行异步表单验证吗?
- 21. 复杂验证扩展
- 22. 角度2中的表单验证
- 23. 验证jmock中的复杂对象
- 24. 时间复杂度验证
- 25. 验证复杂的类在MVC
- 26. Firefox中的复选框表单验证
- 27. 如何在Angular 2中实现表单输入验证
- 28. Marketo复制表单验证
- 29. 复杂的服务器端验证
- 30. Play Framework 2 /冗余对象验证
适用于播放v1或播放V2这个问题!? – adis 2012-05-11 19:05:55