Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 播放框架2字段分组_Scala_Playframework 2.2 - Fatal编程技术网

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
  • 复选框
始终需要文本输入1。只有选中复选框时,才需要文本输入2。我如何通过play实现这种类型的验证?目前我有这样的想法:

val myForm: Form[MyData] = Form(
  mapping(
    "text1" -> text.verifying("Text1 is required", !_isEmpty),
    "text2" -> text.verifying("Text2 is required", !_isEmpty),
    "check" -> boolean
)
但显然这不是我想要的,因为它总是需要text2。是否有一种方法来编写此文档以实现这种相互依赖的验证

根据wheaties建议更新: 此解决方案有效,但我需要克服一些怪癖:

  • 除非表单中的所有其他约束都通过,否则不会进行特殊验证。如果其他约束失败,则甚至不会执行特别验证。我需要它们一起执行,以便在表单上显示所有错误消息
  • 在此特别验证期间分配的错误不适用于特定表单输入,例如text2。在我的模板中,我需要在text2上显示一条错误消息,内容如下(“因为您选中了复选框,所以需要填写此输入”)。相反,该错误只是一般的“表单级别”错误。您可以想象我将有多个此类验证的实例,因此我可以假设此错误适用于text2

  • 我查看了该游戏支持的自定义验证器,但不知道如何使用它们跨多个字段进行操作。仅在正在验证的表单字段中应用,没有明显的方式引用表单中的其他输入。

    您可以从文档中看到,它们允许对您创建的表单对象进行特殊验证(请参阅)。您可以做的是创建一个验证程序:

     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使用嵌套映射和您建议应用于嵌套映射的特别验证的组合来实现它