0

我对 Groovy 和 Grails 比较陌生,我会在业余时间尝试它们。我有一个小型测试 Grails 应用程序,我可以使用 运行良好grails run-app,但grails run-war会导致错误。

在该grails-app/conf/BootStrip.init方法中,我在 and 上添加了一些属性获取DefaultGrailsControllerClassDefaultGrailsApplication

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方法正在被调用(通过 a println),但是metaClassrun-war.

知道我错过了什么吗?

4

1 回答 1

3

grails run-war -- 在 Jetty 中运行 Grails 应用程序的 WAR

grails run-app -- 在 Jetty 中运行 Grails 应用程序

不同之处似乎在于 run-war 不像 run-app 那样支持重新加载。

不确定您缺少什么。

于 2009-08-28T10:27:20.307 回答