2009-03-04 13 views
5

Quando si persistono oggetti di dominio che utilizzano Grails/GORM, spesso mi chiedo perché una chiamata save() fallisce.o.errors.allErrors.each {println it} per impostazione predefinita quando non si riesce a salvare un oggetto dominio

Questo può essere facilmente risolto con l'aggiunta di logica:

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

Tuttavia, l'aggiunta di questa ovunque faccio un .save() aggiunge un sacco di codice duplicato. Nello spirito di DRY mi piacerebbe configurare Grails/GORM per stampare automaticamente eventuali errori di salvataggio sulla console (stderr). È possibile? In caso contrario, come estendere GORM per renderlo possibile?

risposta

9

Soluzione:

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

Questo aggiunge un metodo chiamato s() che chiamerà save() e stampare eventuali errori.

+1

Questa è una bella espansione della risposta che ho fornito. Sono contento che l'hai risolto. – codeLes

+3

Questo aggiungerà s() a tutti gli oggetti, non solo agli oggetti del dominio. Per aggiungerlo solo agli oggetti di dominio, penso che sia necessario eseguire la metaprogrammazione nella chiusura doWithDynamicMethods di un plug-in –

0

Questo non è il più pulito in cerca, e non v'è probabilmente un modo migliore , groovier per fare questo. Sulla base di ricerca here ho messo insieme questo codice che potrebbe essere qualcosa che si potrebbe ampliare ed impiego:

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

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

def b = new Book() 

b.customPrintTitle() 
Problemi correlati