2009-12-09 19 views
9

Nel mio graal app che hanno un oggetto comando esterno che contiene un elenco di altri oggetti comando:Grails: oggetti comando nidificati

public class OuterCommand { 

    List<InnerCommand> innerCommands = ListUtils.lazyList([], FactoryUtils.instantiateFactory(InnerCommand)) 
} 

class InnerCommand { 
    String code 
    Long id 
    String value 

    static constraints = { 
     code(nullable: false, blank: false) 
     value(nullable: false, blank: false) 
    } 
} 

l'istanza piuttosto insolita di innerCommands si basa su this advice. Tuttavia, trovo che se chiamo validate() su un'istanza di OuterCommand, la convalida non sembra convalidare le istanze contenute di InnerCommand.

È possibile annidare gli oggetti di comando e convalidare l'intero grafico degli oggetti comando quando viene chiamato l'oggetto più esterno validate()?

Grazie, Don

risposta

0

Non credo che Dominio oggetti in una Command o nidificate comandi ottengono convalidati per impostazione predefinita, si sarebbe dovuto scrivere a validator che scorre le innerCommands e li convalida.

static constraints = { 
    innerCommands(validator:{val,obj -> 
     //validate and merge errors from each innerCommand 
    }) 
} 

Probabilmente dovrete per gestire gli errori oggetto e fonderlo tutti i risultati insieme, ma non è troppo difficile.

+0

è ancora così? – dbrin

8

Ho ottenuto questo lavoro seguendo questi passaggi:

rendere l'oggetto di comando interno validabile dal momento che non è sempre un'istanza come un oggetto comando normale. Ci sono due modi per fare questo, con l'@org.codehaus.groovy.grails.validation.Validateable annotazioni, o con il graal dei parametri di configurazione grails.validateable.classes

Aggiungere un validatore personalizzato per innerCommands a OuterCommand

static constraints = { 
    innerCommands(validator: {val, obj -> 
     // 'attributes.validation.failed' is the key for the message that will 
     // be shown if validation of innerCommands fails 
     return val.every { it.validate() } ?: ['attributes.validation.failed'] 
    }) 
} 
+0

Vedere http://old.nabble.com/validating-nested-command-objects-td26714921.html#a26715507 per la discussione. –

+0

è ancora così? – dbrin

Problemi correlati