2009-12-09 10 views
9

En mi griales aplicación que tienen un objeto de comando exterior que contiene una lista de otros objetos de comando:Grails: objetos de comando anidados

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) 
    } 
} 

La instanciación poco habitual de innerCommands se basa en this advice. Sin embargo, me parece que si llamo al validate() en una instancia de OuterCommand, la validación no parece validar las instancias contenidas de InnerCommand.

¿Es posible anidar objetos de comando y tener todo el gráfico de objetos de comando validados cuando se llama al validate() en el objeto más externo?

Gracias, Don

Respuesta

0

No creo que objetos de dominio en un Command o anidados comandos Get validados por defecto, tendría que escribir a validator que recorra los innerCommands y se los valida.

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

Probablemente tendrá que manejar el objeto Errors y combinar todos los resultados, pero no es demasiado difícil.

+0

¿Sigue siendo el caso? – dbrin

8

Tengo este trabajo siguiendo estos pasos:

hacer que el objeto de comando interno validable, ya que no se está instanciado como un objeto de comando normal. Hay dos maneras de hacer esto, con el @org.codehaus.groovy.grails.validation.Validateable anotación o con el parámetro de configuración griales grails.validateable.classes

Adición de un validador personalizado para 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

Consulte http://old.nabble.com/validating-nested-command-objects-td26714921.html#a26715507 para la discusión. –

+0

¿Sigue siendo así? – dbrin

Cuestiones relacionadas