我了解如何在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. ControlsFX复杂验证
- 6. 如何在Play中的特定表单字段上设置自定义验证错误! 2. *
- 7. 复杂的bean验证
- 8. 复杂的jquery验证
- 9. 复杂的验证场景
- 10. jQuery的表单验证:验证脚本指定外部
- 11. 如何在ASP.NET MVC 2应用程序中执行复杂的模型验证?
- 12. 复杂表单验证(禁用对子对象属性的验证)
- 13. 角:表单验证和定制指令
- 14. Symfony 2表单验证
- 15. 如何在发生表单验证错误时指定它们?
- 16. 如何使用Play正确验证表单!在斯卡拉?
- 17. Symfony 2中的动态表单验证
- 18. MVC ModelState验证复杂属性列表
- 19. 复杂的密码验证的单正则表达式
- 20. Symfony 2表单验证组
- 21. 在复杂模型上验证多页表单
- 22. 如何在Zend Framework 2和Doctrine中验证我的表单?
- 23. 在Play Framework 2中自定义验证消息
- 24. 复杂的教条查询表单验证帮助!
- 25. 什么是验证复杂Flex表单的最佳方式?
- 26. 不验证表单中的Symfony 2
- 27. jQuery复杂验证规则
- 28. Dropwizard中的Java复杂验证?
- 29. 表单验证指令
- 30. ASP.NET MVC:如何使用指定的UpdateTargetID验证Ajax表单?
适用于播放v1或播放V2这个问题!? – adis 2012-05-11 19:05:55