我對Groovy和Grails比較陌生,在業餘時間嘗試使用它們。我有一個小測試Grails應用程序,我可以使用grails run-app
正常運行,但是grails run-war
導致錯誤。run-app和run-war之間的Grails行爲差異
在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
之下。
任何想法我失蹤?
我讀過`run-app`從Grails 1.3開始使用Tomcat的地方。 – 2017-01-22 18:02:52