gpt4 book ai didi

validation - 如何停止grails清除自定义验证错误

转载 作者:行者123 更新时间:2023-12-02 15:20:31 24 4
gpt4 key购买 nike

在我的Grails应用中,我正在使用服务中的方法对用户提交的数据进行复杂的验证。不幸的是,Grails悄悄地破坏了我。

  • 我用用户提交的数据
  • 填充域实例
  • 我将实例交给服务,该服务将分析属性。
  • 如果发现错误,我使用
     instance.errors.rejectValue('myValue','errors.customErrorCode','Error') 
  • 场景之后,当服务将域实例传递回 Controller 时,grails将检查更改的属性,并在返回实例之前调用validate()。 (可通过查看将域实例从服务返回到更改了一个或多个属性的 Controller 时调用的beforeValidate事件进行验证)
  • 该行为清除了我添加的所有自定义错误,并且现在在 Controller 中恢复的实例现在正确无误。

  • 我怎么能够

    A)阻止Grails在服务和 Controller 之间进行验证

    要么

    B)防止validate()调用清除我的自定义错误。

    编辑
    到目前为止,我已经找到了部分答案,

    如果您使用instance.get(params.id),grails将在幕后自我验证,以消除自定义错误。

    如果使用instance.read(params.id),则可以在某种程度上绕过此行为。 docs

    但是此解决方案受域关系限制。任何其他解决方案都欢迎。

    最佳答案

    似乎不是自定义验证。可能是由于交易服务。服务为每个方法打开单独的事务,并在方法结束后清除实体。您可以在docs中找到提到的内容(请阅读part的最后一段)。因此,错误并不是因为验证而消失。

    不知道您的服务是否具有事务性。但是如果是这样,可以在不希望丢失错误的情况下向方法添加@NotTransactional注释。和
    错误将被保存。

    希望能有所帮助,
    Matvei。

    关于validation - 如何停止grails清除自定义验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37172068/

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