我对Groovy和Grails相对较新,并在业余时间试用它们。我有一个小型的Grails测试应用程序,可以使用grails run-app
正常运行,但是grails run-war
导致错误。
在grails-app/conf/BootStrip.init
方法中,我在DefaultGrailsControllerClass
和DefaultGrailsApplication
上添加了一些属性 getter :
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
之下。知道我缺少什么吗?
最佳答案
grails run-war-在Jetty中运行Grails应用程序的WAR
grails run-app-在Jetty中运行Grails应用程序
差异似乎是run-war不像run-app那样支持重新加载。
不知道你缺少什么。
关于grails - 运行应用程序和运行 war 之间的Grails行为差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1090303/