Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.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
Grails o、 errors.allErrors.each{println it}在保存域对象失败时默认为_Grails_Groovy_Metaprogramming_Gorm - Fatal编程技术网

Grails o、 errors.allErrors.each{println it}在保存域对象失败时默认为

Grails o、 errors.allErrors.each{println it}在保存域对象失败时默认为,grails,groovy,metaprogramming,gorm,Grails,Groovy,Metaprogramming,Gorm,当使用Grails/GORM持久化域对象时,我经常想知道为什么save()调用失败 这可以通过添加逻辑轻松解决: if (!o.save()) { o.errors.allErrors.each { println it } } 但是,在我执行.save()操作的任何地方添加此项都会添加大量重复代码。本着DRY的精神,我希望配置Grails/GORM,以自动将任何保存错误打印到控制台(stderr)。可能吗?如果没有,我如何扩展GORM使之成为可能?这不是最干净的外观,可能有更好、更常

当使用Grails/GORM持久化域对象时,我经常想知道为什么save()调用失败

这可以通过添加逻辑轻松解决:

if (!o.save()) {
    o.errors.allErrors.each { println it }
}

但是,在我执行.save()操作的任何地方添加此项都会添加大量重复代码。本着DRY的精神,我希望配置Grails/GORM,以自动将任何保存错误打印到控制台(stderr)。可能吗?如果没有,我如何扩展GORM使之成为可能?

这不是最干净的外观,可能有更好、更常规的方法来实现这一点。基于外观,我将以下代码组合在一起,这些代码可能是您可以扩展和使用的:

class Book {
   void printTitle(){ println "The Title" }
}

Book.metaClass.customPrintTitle << {-> 
    println "changin ur class"
    printTitle()
}

def b = new Book()

b.customPrintTitle()
教材{
void printTitle(){println“标题”}
}
Book.metaClass.customPrintTitle
println“changin ur类”
printTitle()
}
def b=新书()
b、 customPrintTitle()
解决方案:

Object.metaClass.s = {
    def o = delegate.save()
    if (!o) {
        delegate.errors.allErrors.each {
            println it
        }
    }
    o
}

这将添加一个名为s()的方法,该方法将调用save()并打印任何错误。

这是我提供的答案的一个很好的扩展。很高兴你解决了这个问题。这将向所有对象添加s(),而不仅仅是域对象。要仅将其添加到域对象,我认为您需要在插件的doWithDynamicMethods闭包中进行元编程