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