我对Groovy和Grails比较新,我在业余时间尝试使用它们。我有一个小测试Grails应用程序,我可以使用grails run-app
正常运行,但grails run-war
会导致错误。
在grails-app/conf/BootStrip.init
方法中,我将一些属性getter添加到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
下。< / p>
知道我缺少什么吗?
答案 0 :(得分:3)
grails run-war - 在Jetty中运行Grails应用程序的WAR
grails run-app - 在Jetty中运行Grails应用程序
差异似乎是run-war不支持像run-app那样重新加载。
不确定你遗失了什么。