gpt4 book ai didi

grails - validate() 和 hasErrors() 之间有什么联系

转载 作者:行者123 更新时间:2023-12-04 07:28:55 24 4
gpt4 key购买 nike

这个问题来自another question的问题我的。在那个问题中,我遇到了 hasErrors() 的情况。功能不适用于 非持久域类 ,即使我在 the instruction 之后所做的所有事情,第 7.5 部分。

按照 Victor 的方式,我通过调用 validate() 解决了这个问题,但我不明白它为什么会起作用。 Grails 文档似乎没有说明您应该在 hasErrors() 函数之前调用 validate() 。这怎么可能发生?

最佳答案

validate 对我来说很有意义在询问对象是否 hasErrors 之前需要调用(或 save 用于正确的域对象,它在幕后调用 validate)。在此上下文中验证意味着“检查此对象是否有效,如果不是则指示任何错误”。

或者,GORM 实现必须调用 validate每次对对象进行任何更改时,这对我来说都是不太理想的行为,因为它可能涉及经常且不必要地完成大量工作(其中一些限制可能涉及大量工作)。

第 7.2 节的开头非常清楚地指出“要验证域类,您可以在任何实例上调用 validate 方法”。它还指出“在 Grails 中基本上有两个阶段的验证,第一阶段是数据绑定(bind),当您将请求参数绑定(bind)到实例时发生......此时您可能已经在 errors 属性中出现错误,因为类型转换(例如将字符串转换为日期)。您可以检查这些并使用 Errors API 获取原始输入值。...验证的第二阶段发生在您调用 validate 或 save 时。这是 Grails 将验证绑定(bind)的时候值反对您定义的约束。”

documentation for hasErrors 也提到了这一点。当您在 documentation site 上时,您可以通过在左侧导航框架中找到方法调用来访问它。 .我总是建议查看这些以及更具描述性的用户指南页面,因为它们通常会提供更多细节。
Here's the page for the validate method也。

我从来没有遇到过调用 validate 的问题直接 - 我很清楚,我可以选择完成所有工作的点,我已准备好进行验证。我在任何地方都看不到更改此行为的选项,但如果您想要 validate要自动调用或在某些条件下调用,您可以通过添加 invokeMethod 来使用一些 Groovy 元编程魔法到类(class)并让它调用validate在传递某些调用之前。看看herehere .
(但我不确定我是否会推荐它!请记住,您的类现在将依赖于在 GORM 验证框架中使用,因为 validate 方法可能不存在)。

关于grails - validate() 和 hasErrors() 之间有什么联系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4544582/

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