проблема получения динамического параметра Config в теге Grails - PullRequest
1 голос
/ 17 апреля 2010

У меня есть динамический параметр конфигурации, который я хочу получить как:

    String srcProperty = "${attrs ['src']}.audio" + ((attrs['locale'])? "_${attrs['locale']}" : '')

    assert srcProperty == "prompt.welcomeMessageOverrideGreeting.audio"

где мой конфиг имеет:

prompt{
    welcomeMessageOverrideGreeting {
        audio = "/en/someFileName.wav"
        txt = "Text alternative for /en/someFileName.wav"
        audio_es = "/es/promptFileName.wav"
        txt_es = "Texto alternativo para /es/someFileName.wav"
    }
}

Пока все работает нормально:

String audio = "${config.prompt.welcomeMessageOverrideGreeting.audio}"

и: assert "$ {config.prompt.welcomeMessageOverrideGreeting.audio}" == "/en/someFileName.wav"

Я не могу заставить это работать:

String audio = config.getProperty("prompt.welcomeMessageOverrideGreeting.audio")

Ответы [ 3 ]

2 голосов
/ 18 апреля 2010

решено: это было действительно сложно, но вот что я нашел, что сработало, чтобы получить динамическое свойство:

String audio = srcProperty.tokenize( '.' ).inject( config ) { cfg, pr -> cfg[ pr ] }

Я написал об этом в блоге: http://www.baselogic.com/blog/development/grails-groovy-development/configslurper-with-dynamic-property-name-from-configurationholder-config-object

2 голосов
/ 17 апреля 2010

Они хранятся не так, как они, они хранятся иерархически. «config.prompt.welcomeMessageOverrideGreeting.audio» - это сокращение, чтобы получить «приглашение» из конфигурации, затем «welcomeMessageOverrideGreeting» из этого, затем «аудио» из этого. Если вы хотите использовать точечную нотацию, просто распрямите конфигурацию:

String audio = config.flatten().getProperty("prompt.welcomeMessageOverrideGreeting.audio")
0 голосов
/ 30 ноября 2010

Принимая myconfig.groovy в classpath:

    prompt{
     welcomeMessageOverrideGreeting {
      audio = "/en/someFileName.wav"
      txt = "Text alternative for /en/someFileName.wav"
      audio_es = "/es/promptFileName.wav"
      txt_es = "Texto alternativo para /es/someFileName.wav"
     }
    }

Мы можем получить свойства, создающие их имена динамически:

def myconfig = this.class.getResource("/myconfig.groovy")
def config = new ConfigSlurper().parse(myconfig)

def dynamic = "welcomeMessageOverrideGreeting"
def dynamic2 = "audio"
def locale = "es"

assert config.prompt[dynamic].audio == "/en/someFileName.wav"
assert config.prompt.welcomeMessageOverrideGreeting[dynamic2] == "/en/someFileName.wav"
assert config.prompt.welcomeMessageOverrideGreeting["${dynamic2}_${locale}"] == "/es/promptFileName.wav"
assert config.prompt[dynamic]["${dynamic2}_${locale}"] == "/es/promptFileName.wav"
...