2010-01-13 6 views
35

Bir Groovy uygulamasına sahibim ve message.properties içinde tanımlanmış bir özelliğine programlı olarak erişmek istiyorum. groovy: Özellikler dosyasına nasıl erişilir?

bir test olarak ben şu denedim:

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

Ama çalışmıyor (bir istisna atar).

Herhangi bir yardım size yardımcı sınıf ConfigSlurper kullanabilir ve GPath ifadeler kullanarak içerdiği özelliklere erişebilirsiniz Groovy mülkiyet dosyaları okuma için Luis

cevap

8

yerine

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

size yazabilir Bu çok kolay.

message(code:"capacity.created") 

ve işe yarıyor!

Luis

+0

Ayrı bir sınıfım var, bir denetleyici değil, bunu denedim ve çalışmıyor ... herhangi bir öneri? –

+0

@ CPU100 'messageSource' bu sınıfa enjekte ve getMessage' yöntemi –

+0

Başlığı için dinamik bir değer iletmek zorunda olduğum bu bölüm benim için çalıştı: Xplora

68

açığız. Ancak, ConfigSlurper'un standart Java özellik dosyalarını desteklemediğinin farkında olmanız gerekir. Normal olarak, ConfigSlurper, bir özellik dosyasına benzer olabilecek, ancak standart groovy notasyonuna uygun olan dosyaları okumak için kullanılacaktır, bu nedenle Dizeler tırnak içinde ve yorumlar // ile başlar veya /* */ bloğunun içindedir. Yani, bir Java özellikleri bir java.util.Properties nesne oluşturmak ve oluşturmak için kullanabilirsiniz gerekir dosyasını okumak için ConfigSlurper: Yalnızca Groovy kodu içinde mülk dosyasını kullanırsanız

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 notasyonu varyantı doğrudan kullanmalıdır.

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

Bu aynı zamanda standart özellik dosyaları, örneğin üzerinde size bazı güzel avantajlar verir Ben doğrudan tüm mesajlar özellikleri dosyaları (message_de.properties, message_fr.properties vb yeniden okuma wothout mesaj özelliklerine erişmek için bir yol bulmuş

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

Cevabınız için teşekkür ederiz. Yaptığınız şey herhangi bir özellik dosyası için geçerlidir, ancak mesaj bir i18n dosyasıdır. İstemcinin yerel ayarı başka bir dile ayarlanmışsa bunun işe yarayacağını düşünüyorum. Yani, message_de, message_es, message_fr, vb. Okuyorsunuz. Ayrıca tüm mesajlar zaten sistem tarafından okunmaktadır. Bundan kurtulabilirsem onları bir daha okumazdım. – Luixv

+0

Harika cevap. Teşekkürler – Gervase

+4

Sadece classpath yükleme için bir uyarı 'properties.load (getClass(). GetClassLoader(). GetResourceAsStream (" mesaj.properties "))' – banterCZ

2

Bu i18n için message.properties okumak için değil en iyi uygulamadır. @Luixv olarak denetleyicileri içinde

message(code:"capacity.created") 

önerdi veya başka bir baharda

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

/fasulye messageSource enjekte sonra fasulye grails: Sen kullanabilirsiniz.