尝试访问配置时没有这样的属性:getFlatConfig

时间:2014-10-03 09:59:28

标签: grails

所以在groovy.config文件中设置了几个我想要的应用程序值。

按如下方式设置:

environments {
    development {
        grails.logging.jul.usebridge = true
        reslist = ['1400x1200','1200x1024','1024x800','800x600']
        resdef = '1024x800'
        mapregs = ['World', 'Europe', 'Asia', 'South America','Central America', 'Pacific','Africa']
        mapdef = 'World'

然后我尝试在控制器中访问它们

if ( params.mapreq == null) {
    mapreq = grailsApplication.config.grails.mapdef
} else {
    mapreq = params.mapreq
}

它似乎工作(亲切的)我得到回来的东西,但看起来像格式中的对象指针 groovy.util.ConfigObject@3764a904

尝试将其更改为getFlatConfig

if ( params.mapreq == null) {
    mapreq = grailsApplication.getFlatConfig.grails.mapdef
} else {
    mapreq = params.mapreq
}

此时我得到“没有这样的属性:尝试访问配置时getFlatConfig”而不是

那么有什么建议吗? 另外,同样的解决方案是否可以用于获取列表(例如mapregs)?

1 个答案:

答案 0 :(得分:2)

grailsApplication.config.grails.mapdef应为grailsApplication.config.mapdef,因为mapdef位于配置的顶层(在该环境块中)。由于grails.mapdef下没有任何内容存储,因此该值将为新的ConfigObject。这就是为什么config.a.b.c.d=1有效的原因 - 每次您访问一个不存在的新关卡时,Groovy会自动创建一个新的ConfigObject来保存设置的值,但如果你&#39} ;重新获取而不是设置,最终只有空实例。

第二个不起作用,因为getFlatConfig应该是getFlatConfig()flatConfig。但是你不能在平面配置中使用ConfigObject风格的点,因为它被展平了。如果mapdef实际位于grails下,则您可以grailsApplication.flatConfig.'grails.mapdef'grailsApplication.flatConfig['grails.mapdef']访问它。但与其他人不一样,所以你要使用grailsApplication.flatConfig.mapdef