Scala 播放框架2字段分组
我有一个由以下输入组成的“组”:Scala 播放框架2字段分组,scala,playframework-2.2,Scala,Playframework 2.2,我有一个由以下输入组成的“组”: 文本输入1 文本输入2 复选框 始终需要文本输入1。只有选中复选框时,才需要文本输入2。我如何通过play实现这种类型的验证?目前我有这样的想法: val myForm: Form[MyData] = Form( mapping( "text1" -> text.verifying("Text1 is required", !_isEmpty), "text2" -> text.verifying("Text2 is requ
- 文本输入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。是否有一种方法来编写此文档以实现这种相互依赖的验证
根据wheaties建议更新:
此解决方案有效,但我需要克服一些怪癖:
我查看了该游戏支持的自定义验证器,但不知道如何使用它们跨多个字段进行操作。仅在正在验证的表单字段中应用,没有明显的方式引用表单中的其他输入。您可以从文档中看到,它们允许对您创建的表单对象进行特殊验证(请参阅)。您可以做的是创建一个验证程序:
def validate(text1: String, text2: String, check: Boolean) = if(check) text2.nonEmpty else true
val myForm: Form[MyData](
mapping("text1" -> text.verifying("Text1 is required", !_isEmpty))
)(MyData.unapply)(MyData.apply) verifying ("Text2 is required if check box checked", {
case data => validate(data.text2, data.check)
})
这应该会给你你想要的,但我也会查看他们的部分(因为他们推荐这是一条很好的路线。)这通常是有效的,但有几个问题:临时验证只在所有其他非临时验证通过后才发生(因此,除非其他一切正常,否则我不会知道错误)。此外,此验证不会“应用”到特定字段,例如text2->换句话说,我希望能够在text2旁边的表单上显示错误,但此错误似乎是表单级错误,而不是字段级错误。我怀疑自定义验证器可能会有所帮助,但我不知道如何使用它们跨多个字段进行验证(自定义验证器似乎只对单个字段进行操作)。@oym您可以将
validate
方法移动到MyData
类本身,然后作为验证器调用该谓词表达式(如果有一个验证器可以接受任意谓词。)您是否介意对此进行一点扩展,也许可以举一个例子?我不知道如何开始:如何使用此验证方法等。ThanksI使用嵌套映射和您建议应用于嵌套映射的特别验证的组合来实现它