2010-01-13 3 views
35

У меня есть приложение Groovy, и я хочу получить доступ к программному объекту , определенному в message.properties.groovy: Как получить доступ к файлу свойств?

В качестве теста я попробовал следующее:

println "capacity.created " + ${message.properties['capacity.created']} 

Но он не работает (бросает исключение).

Любой помощь приветствуется

Луис

ответ

8

Я нашел способ, чтобы получить доступ к свойствам сообщений непосредственно wothout перечитывая все сообщения свойства файлов (message_de.properties, message_fr.properties и т.д.) Это очень просто.

message(code:"capacity.created") 

и он работает!

Луис

+0

У меня есть отдельный класс, это не контроллер, я пробовал это, и он не работает ... любое предложение? –

+0

@ CPU100 вставляет' messageSource' в этот класс и использует ' getMessage'. –

+0

Это сработало для меня, когда мне пришлось передать динамическое значение Title: Xplora

68

Для чтения файлов свойств в Groovy вы можете использовать утилиту класс ConfigSlurper и получить доступ к содержащимся свойствам, используя GPATH выражение. Однако вы должны знать, что ConfigSlurper не поддерживает стандартные файлы свойств Java. Обычно ConfigSlurper будет использоваться для чтения файлов .groovy, которые могут быть похожими на файл свойств, но придерживаться стандартного примечания, так что строки находятся внутри кавычек, а комментарии начинаются с // или находятся внутри блока /* */. Таким образом, чтобы читать Java свойства файла, который нужно создать java.util.Properties объект и использовать его для создания ConfigSlurper:

def props = new Properties() 
new File("message.properties").withInputStream { 
    stream -> props.load(stream) 
} 
// accessing the property from Properties object using Groovy's map notation 
println "capacity.created=" + props["capacity.created"] 

def config = new ConfigSlurper().parse(props) 
// accessing the property from ConfigSlurper object using GPath expression 
println "capacity.created=" + config.capacity.created 

Если вы используете только файл свойств внутри Groovy кода, который вы должны использовать Groovy вариант обозначения непосредственно.

def config = new ConfigSlurper().parse(new File("message.groovy").toURL()) 

Это также дает вам некоторые преимущества перед стандартными файлами свойств, например. вместо

capacity.created="x" 
capacity.modified="y" 

вы можете написать

capacity { 
    created="x" 
    modified="y" 
} 
+0

Спасибо за ваш ответ. То, что вы сделали, действительно для любого файла свойств, но сообщение является файлом i18n. Я думаю, что это сработает, если локаль клиента настроена на другой язык. Я имею в виду, вы не читаете message_de, message_es, message_fr и т. Д. Кроме того, все сообщения уже прочитаны системой. Я не буду читать их снова, если смогу этого избежать. – Luixv

+0

Отличный ответ. Спасибо – Gervase

+4

Просто уведомление для загрузки из classpath использует 'properties.load (getClass(). GetClassLoader(). GetResourceAsStream (" message.свойства "))' – banterCZ

2

Это не лучшая практика для чтения message.properties для i18n. Вы можете использовать:

message(code:"capacity.created") 

в контроллерах как @Luixv предложил или

messageSource.getMessage("capacity.created", 
         [].toArray(), "Capacity Created.", null) 

в любой другой весной/Grails боб после введения боб messageSource.

Смежные вопросы