Je suis relativement nouveau à Groovy et Grails et je les essaie dans mon temps libre. J'ai un petit test Grails application que je suis capable de fonctionner correctement en utilisant grails run-app
, mais grails run-war
entraîne une erreur.Différence de comportement de Grails entre run-app et run-war
Dans la méthode grails-app/conf/BootStrip.init
, j'ajoute des apporteurs de propriété sur le DefaultGrailsControllerClass
et DefaultGrailsApplication
:
DefaultGrailsControllerClass.metaClass.getMenuText = { ->
getPropertyOrStaticPropertyOrFieldValue('menuText', String.class)
}
DefaultGrailsControllerClass.metaClass.getMenuOrder = { ->
getPropertyOrStaticPropertyOrFieldValue('menuOrder', Integer.class)
}
DefaultGrailsApplication.metaClass.getMenuControllerClasses = { ->
controllerClasses.findAll { it.menuText != null }.sort { it.menuOrder }
}
Dans mon grails-app/views/layouts/main.gsp
, j'utilise ceci:
<g:each var="c" in="${ grailsApplication.menuControllerClasses }">
<li><g:link controller="${c.logicalPropertyName}">${c.menuText}</g:link></li>
</g:each>
Cela fonctionne bien sous run-app
, mais en l'exécutant sous run-war
, je reçois les éléments suivants:
groovy.lang.MissingPropertyException: No such property: menuControllerClasses for class: org.codehaus.groovy.grails.commons.DefaultGrailsApplication
J'ai essayé ceci sous Grails 1.1.1 et 1.2-M1 et obtenir le même résultat. J'ai vérifié que la méthode BootStrap.init
est appelée (via un println
), mais les modifications apportées au metaClass
ne semblent pas prendre sous run-war
.
Une idée de ce qui me manque?
J'ai lu quelque part que 'run-app' utilise Tomcat à partir de Grails 1.3. –