Je reçois une exception NullPointerException lors de l'accès à des contraintes statiques
Question
Le code
${personRequest.constraints.requestStatus.inList}
dans mon fichier gsp génère une NullPointerException
, mais new PersonRequest (). contraintes ..
fonctionne. Pourquoi? Les contraintes
ne sont-ils pas statiques?
La solution
Copié à partir de ici (liste de diffusion grails-user)
mais pourquoi accéder aux champs statiques ne fonctionne pas?
Parce que les " contraintes " champ statique est une propriété de fermeture. Il n'a pas sous-propriétés relatives à la contraintes.
Grails évalue cette fermeture en utilisant un constructeur de contraintes qui surveille " appels " aux méthodes qui n'existent pas, c'est-à-dire les noms de propriété que vous utilisez:
type( inList: [xxxxx])
... provoque un appel de méthode à "type". avec un paramètre Map contenant " inList " == > un peu de valeur.
À partir de cette information, Grails construit un liste de toutes les contraintes
disponible et les lie au futur instances de la classe de domaine.Donc, lorsque vous accédez à User.constraints statiquement, vous obtenez un
Fermeture.Nous pourrions envisager de remplacer la valeur de la propriété des contraintes statiques au moment de l'exécution après avoir évalué le La fermeture est initialisée avec. Cependant, cela pourrait être un peu "trop". la magie. Qu'en pensent les gens?
FYI c'est comme ça maintenant parce que jusqu'à 0.4 (si je me souviens bien), les contraintes n'étaient pas statiques, et en 0.4 elles peuvent toujours être non statique. Seulement dans 0.5
allons-nous jeter une exception / ignorer contraintes non statiques.