我正在运行 grails 2.2.4。以下代码在开发中运行良好。当我将 war 文件部署到 tomcat 时,会引发 grailsApplication.config 为空的异常:
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 加载它们来设置一些枚举值。一种解决方法是对这些值进行硬编码,因为它们不太可能改变。但是我很好奇为什么配置文件会为空。也不能将 grailsApplication 注入(inject)枚举吗?
我调用 Holders.grailsApplication。注入(inject) grailsApplication 并不能解决问题。
请您参考如下方法:
创建枚举值的构造函数调用将作为枚举类型的静态初始化的一部分发生。如果这发生在 GrailsApplication 被引导之前,那么您将得到 null。在开发模式下,配置在启动过程中加载的时间比作为 WAR 运行时要早得多(因为它需要对命令行脚本可用)。
以不同的方式解决问题可能会更好,例如有一个服务方法或 taglib,它将枚举类型作为参数并返回从配置中提取的适当维度。




