Obtengo una NullPointerException al acceder a restricciones estáticas
Pregunta
El código
${personRequest.constraints.requestStatus.inList}
en mi archivo gsp lanza una NullPointerException
, pero new PersonRequest (). restricciones ...
funciona. ¿Por qué? ¿No es restricciones
estática?
Solución
Copiado de here (grails-user mail list)
pero ¿por qué acceder a campos estáticos? no funciona?
Porque las " restricciones " campo estático Es una propiedad de cierre. No tiene sub-propiedades relacionadas con la restricciones.
Grails evalúa este cierre usando una constructor de restricciones que supervisa " llamadas " a métodos que no existen, es decir, los nombres de propiedad que utiliza:
type( inList: [xxxxx])
... provoca una llamada al método " tipo " con un parámetro de mapa que contiene " inList " == > algún valor.
A partir de esta información, Grails construye un lista de todas las restricciones
Disponible y los une al futuro. instancias de la clase de dominio.Entonces, cuando accedes a User.constraints estáticamente, estás recibiendo un
Cierre.-podíamos -podría mirar a reemplazar el valor de la propiedad de restricciones estáticas en tiempo de ejecución después de evaluar el Cierre se inicializa con. Sin embargo, esto podría ser un poco " demasiado " mágico. ¿Qué piensa la gente?
FYI es así ahora porque hasta Las restricciones de 0.4 (si recuerdo) no eran estáticas, y en 0.4 pueden aún así ser no estático. Solo en 0.5
vamos a lanzar una excepción / ignorar restricciones no estáticas.