Grails o、 errors.allErrors.each{println it}在保存域对象失败时默认为
当使用Grails/GORM持久化域对象时,我经常想知道为什么save()调用失败 这可以通过添加逻辑轻松解决: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使之成为可能?这不是最干净的外观,可能有更好、更常
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闭包中进行元编程