grails - 运行应用程序和运行 war 之间的Grails行为差异

标签 grails groovy bootstrapping metaclass expandometaclass

我对Groovy和Grails相对较新,并在业余时间试用它们。我有一个小型的Grails测试应用程序,可以使用grails run-app正常运行,但是grails run-war导致错误。

grails-app/conf/BootStrip.init方法中,我在DefaultGrailsControllerClassDefaultGrailsApplication上添加了一些属性 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/

相关文章:

groovy - 使用 findAll 和 groovy 中的 every 更新 map

java - Lookup 对象的实例

grails - 为什么 grails 使用 "static"变量而不是注释

docker - Grails + Docker

jenkins 管道中的 Groovy 字符串插值 - 混合凭据和常量

java - Groovy 2.5.0 为 methodcalltransformation 提供了 noclassdeffounderror

java - Grails 调度错误

grails - 服务未正确注入(inject)到quartz作业类中使用grails 2.3.6的quartz调度程序插件(v1.0.1)

windows-installer - 使用 Inno Setup 有条件地安装 x64 驱动程序

JavaScript 初始化回调链中的回调参数