【问题标题】:Grails: object is being saved although it has errorsGrails:对象正在保存,尽管它有错误
【发布时间】:2014-07-20 16:42:01
【问题描述】:

我在尝试验证和保存域对象时遇到问题。

首先我进行验证,当验证错误时,我将错误放入我的未来以保存对象,如下所示:

myDomain.errors.reject("An Error")
myDomain.discard()

然后,当我尝试保存此对象时,我可以看到错误列表有一个错误,但 'validate()' 返回 'true',也,当函数完成时,对象会被自动保存。 我必须说所有被调用的函数都在同一个类中,它是一个控制器。

我需要知道如何编写我的保存函数(在控制器类中),它只显示错误而不保存对象,当验证良好时,保存对象。

谢谢!

【问题讨论】:

    标签: validation grails


    【解决方案1】:

    myDomain.validate() 将覆盖 myDomain.errors 清除 reject()。你可以这样做:

      // bind etc.
      ...
    
      // do grails validation
      if (!myDomain.validate()) {
        myDomain.discard()
      }
    
      // do custom validation
      if (custom validation has errors) {
        myDomain.errors.reject ()
        myDomain.discard()
      }
    

    如果您可以将自定义验证移至 myDomain 上的 validator,则不需要自定义验证。

    您不需要显式调用 save()。

    【讨论】:

      【解决方案2】:

      解决方法是使用:

      @Transactional(readOnly = true)
      

      对于位于服务文件中的函数。 它使功能避免在最后保存交易,这首先导致了问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-03
        • 1970-01-01
        • 2012-03-01
        • 1970-01-01
        • 2015-01-06
        • 2012-05-28
        • 2019-11-29
        • 1970-01-01
        相关资源
        最近更新 更多