2009-07-07 7 views
0

Я относительно новичок в Groovy и Grails, и я пробовал их в свободное время. У меня есть небольшое тестовое приложение Grails, которое я могу выполнить нормально, используя grails run-app, но grails run-war приводит к ошибке.Разница в поведении Grails между run-app и run-war

В методе grails-app/conf/BootStrip.init я добавляю некоторые методы получения собственности на 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: No such property: menuControllerClasses for class: org.codehaus.groovy.grails.commons.DefaultGrailsApplication 

Я пробовал это под Grails 1.1.1 и 1.2-M1 и получал тот же результат. Я проверил, что метод BootStrap.init вызывается (через println), но изменения, внесенные в metaClass, не отображаются под run-war.

Любая идея, что мне не хватает?

ответ

3

Grails вводной война - ВОЙНА приложения Grails запустит в Jetty

Grails выполнение приложения - запуск приложения Grails в Jetty

Разницы, кажется, что бежать-войну не поддерживает перегрузку как работает run-app.

Не уверен, что вам не хватает.

+1

Я где-то читал, что 'run-app' использует Tomcat, начиная с Grails 1.3. –

 Смежные вопросы

  • Нет связанных вопросов^_^