grails groovy grails-validation command-objects

Grails: objetos de comando anidados



groovy grails-validation (2)

No creo que los Objetos del Dominio en un Comando o Comandos anidados se validen por defecto, usted debería escribir un validador que recorra los Comandos Internos y los valide a todos.

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

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

En mi aplicación Grails tengo un objeto de comando externo que contiene una lista de otros objetos de comando:

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 bastante inusual de innerCommands se basa en este consejo . Sin embargo, creo que si OuterCommand validate() en una instancia de OuterCommand , la validación no parece validar las instancias contenidas de InnerCommand .

¿Es posible anidar objetos de comando y validar el gráfico completo de los objetos de comando cuando se llama a validate() en el objeto externo?

Gracias, Don


Lo hice funcionar siguiendo estos pasos:

Haga el objeto de comando interno validable ya que no se está creando una instancia como un objeto de comando normal. Hay dos formas de hacerlo, con la anotación @org.codehaus.groovy.grails.validation.Validateable , o con el parámetro de configuración de grails.validateable.classes

Agregar 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''] }) }