2009-03-04 7 views
5

Wenn persistente Domänenobjekte mit Grails/GORM verwendet werden, frage ich mich häufig, warum ein save() - Aufruf fehlschlägt. o.errors.allErrors.each {println it}, wenn ein Domänenobjekt nicht gespeichert werden kann

Dies kann leicht durch Hinzufügen der Logik gelöst werden:

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

jedoch das Hinzufügen dieser überall mache ich eine .save() fügt eine Menge von doppeltem Code. Im Geiste von DRY möchte ich Grails/GORM konfigurieren, um automatisch irgendwelche Speicherfehler auf die Konsole (stderr) zu drucken. Ist das möglich? Wenn nicht, wie erweitere ich GORM, um es zu ermöglichen?

Antwort

9

Lösung:

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

Dieses eine Methode namens s fügt hinzu(), die sparen() aufrufen und Drucke irgendwelche Fehler aus.

+1

Das ist eine schöne Erweiterung der Antwort, die ich zur Verfügung gestellt habe. Freut mich, dass du es gelöst hast. – codeLes

+3

Dadurch wird s() allen Objekten hinzugefügt, nicht nur Domänenobjekten. Um es nur zu Domänenobjekten hinzuzufügen, müssen Sie die Metaprogrammierung in doWithDynamicMethods schließen –

0

Dies ist nicht das sauberste suchen, und es ist wahrscheinlich ein besser, groovier Weg, dies zu tun. Basierend auf here suchen habe ich diesen Code zusammen, dass etwas sein könnte, Sie erweitern und die Nutzung könnten:

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

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

def b = new Book() 

b.customPrintTitle() 
Verwandte Themen