Различие в поведении Grails между run-app и run-war
Я относительно новичок в Groovy и Grails и пробую их в свое свободное время. У меня есть небольшое тестовое приложение Grails, которое я могу нормально запускать, используя grails run-app
, но grails run-war
приводит к ошибке.
в grails-app/conf/BootStrip.init
метод, я добавляю некоторые свойства get на DefaultGrailsControllerClass
а также 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 }
}
В моем grails-app/views/layouts/main.gsp
Я использую это:
<g:each var="c" in="${ grailsApplication.menuControllerClasses }">
<li><g:link controller="${c.logicalPropertyName}">${c.menuText}</g:link></li>
</g:each>
Это прекрасно работает под run-app
, но работает под run-war
Я получаю следующее:
groovy.lang.MissingPropertyException: Нет такого свойства: menuControllerClasses для класса: org.codehaus.groovy.grails.commons.DefaultGrailsApplication
Я попробовал это под Grails 1.1.1 и 1.2-M1 и получил тот же результат. Я подтвердил, что BootStrap.init
метод вызывается (через println
), но изменения, внесенные в metaClass
кажется, не взять под run-war
,
Есть идеи, что мне не хватает?
1 ответ
Grails Run-War - Запустите приложение WAR Grails в Причал
grails run-app - запускает приложение Grails в Jetty
Разница в том, что run-war не поддерживает перезагрузку, как run-app.
Не уверен, что вам не хватает.