【问题标题】:Grails behavior difference between run-app and run-warGrails run-app 和 run-war 之间的行为差​​异
【发布时间】:2010-11-08 14:02:33
【问题描述】:

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

grails-app/conf/BootStrip.init 方法中,我将一些属性getter 添加到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 方法正在被调用(通过 println),但对 metaClass 所做的更改似乎不会在 run-war 下进行。

知道我错过了什么吗?

【问题讨论】:

    标签: grails groovy bootstrapping metaclass expandometaclass


    【解决方案1】:

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

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

    区别似乎在于run-war不像run-app那样支持重载。

    不知道你错过了什么。

    【讨论】:

    • 我在某处读到 run-app 从 Grails 1.3 开始使用 Tomcat。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多