私はGroovyとGrailsに比較的新しく、余裕を持って試してみたいと思います。私はgrails run-app
を使って細かく実行できる小さなテストGrailsアプリケーションを持っていますが、grails run-war
はエラーになります。 grails-app/conf/BootStrip.init
方法で実行アプリケーションと実行中のGrailsの動作の違い
、私は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
になりません。
私が迷っているものは何ですか?
私は 'run-app'がGrails 1.3から始まるTomcatを使用しているところを読んでいます。 –