我正在运行grails 2.2.4。以下代码在开发中工作正常。当我将war文件部署到tomcat时,会抛出grailsApplication.config为null的异常:
import grails.util.Holders
public enum PhotoSize {
PROFILE(Holders.grailsApplication.config.img.profile.height, Holders.grailsApplication.config.img.profile.width),
SEARCH_RESULT(Holders.grailsApplication.config.img.search.height, Holders.grailsApplication.config.img.search.width),
GALLERY(Holders.grailsApplication.config.img.gallery.full.height, Holders.grailsApplication.config.img.gallery.full.width),
GALLERY_THUMBNAIL(Holders.grailsApplication.config.img.gallery.thumbnail.height, Holders.grailsApplication.config.img.gallery.thumbnail.width),
MEMBER_THUMBNAIL(Holders.grailsApplication.config.img.member.thumbnail.height, Holders.grailsApplication.config.img.member.thumbnail.width)
//def config = Holders.config
//def grailsApplication
...
我正在尝试通过从Config.groovy加载它们来设置一些枚举值。解决方法是对值进行硬编码,因为它们不太可能发生变化。但是我很好奇为什么配置文件将为null。也是不可能将grailsApplication注入枚举?
我正在调用Holders.grailsApplication。注入grailsApplication并不能解决问题。
答案 0 :(得分:3)
构造函数调用创建枚举值将作为枚举类型的静态初始化的一部分发生。如果在GrailsApplication被引导之前发生这种情况,那么你将获得null。在开发模式下,配置在启动过程中比在作为WAR运行时要早得多(因为它需要可用于命令行脚本)。
以不同方式处理问题可能更好,例如,使用服务方法或taglib将枚举类型作为参数,并返回从配置中提取的相应维度。