【发布时间】:2014-06-12 02:58:28
【问题描述】:
我有以下输入的“组”:
- 文字输入1
- 文字输入2
- 复选框
始终需要文本输入 1。仅当检查复选框时才需要文本输入2。如何通过游戏实现这种类型的验证?目前我有这样的事情:
val myForm: Form[MyData] = Form(
mapping(
"text1" -> text.verifying("Text1 is required", !_isEmpty),
"text2" -> text.verifying("Text2 is required", !_isEmpty),
"check" -> boolean
)
但显然这不是我想要的,因为它总是需要 text2。有没有办法组合它来实现这种相互依赖的验证?
根据小麦的建议更新: 这个解决方案有效,但是它有一些我需要克服的怪癖:
- 在表单中的所有其他约束都通过之前,不会发生临时验证。如果其他约束失败,则临时验证甚至不会执行。我需要它们一起执行,以便我可以在表单上显示所有错误消息。
- 在此临时验证期间分配的错误不适用于特定的表单输入,例如文本2。在我的模板中,我需要在 text2 上显示一条错误消息,例如(“由于您选中了复选框,因此您需要填写此输入”)。相反,该错误只是一般的“表单级”错误。你可以想象我会有多个这种类型的验证实例,所以我可以假设这个错误适用于 text2。
我查看了 play 支持的自定义验证器,但不知道如何使用它们跨多个字段进行操作。 The example they show 仅应用正在验证的表单字段,没有明显的方式来引用表单中的其他输入。
【问题讨论】: