gpt4 book ai didi

域对象上的 grails 验证方法

转载 作者:行者123 更新时间:2023-12-05 00:05:45 25 4
gpt4 key购买 nike

我写了一个非常简单的测试用例,发现当我在域对象上调用 validate 时,Grails 只进行浅层验证。我可以在 grails 中进行深度验证吗?有谁能够帮助我?

class Person {
Address address
}

class Address {
String city
}

当我做新 Address().validate()它返回 false 但当我这样做时 new Person(address: new Address()).validate它返回真。

最佳答案

虽然目前没有为 validate() 记录“深度验证”和 save() 方法,它 will be in future (该文档指出该文档已丢失,但与完整的 1.3.x 树相关)。有关这些方法的文档 deepValidate然后参数 will state :

@deepValidate@ (optional) - Determines whether associations of the domain instance should also be validated, i.e. whether validation cascades or not. This is @true@ by default - set to @false@ to disable cascading validation.



然而,测试表明“深度验证”是 不是 在以下任何一种情况下执行:
  • 一对一关联
  • 一对多关联
  • 使用匹配的 setter 分配的关联对象
  • 使用匹配的 addTo*(..) 分配的关联对象方法,例如,person.addToAddresses(..)
  • 使用 validate()save()方法,
  • 并且,使用带有显式 deepValidate: true 的两种方法参数

  • Similar findings have been published at another place ,将“非行为”归类为“已知问题”。我自己的、综合的、测试用例可以是 downloaded from here .

    解决方案 ,最后,是手动调用子对象上的验证:
    class Person {
    Address primaryAddress
    static hasMany = [secondaryAddresses: Address]

    static constraints = {
    primaryAddress validator: {
    it?.validate()
    }
    secondaryAddresses validator: {
    it?.every { it?.validate() }
    }
    }
    }

    关于域对象上的 grails 验证方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4223325/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com