2010-01-13 64 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

我有一個單獨的類,它不是一個控制器,我試過了,它不工作...任何建議? – 2014-09-30 14:57:24

+0

@CPU100將'messageSource'注入該類,並使用' getMessage'方法 – 2015-05-21 07:39:52

+0

這適用於我必須通過標題的動態值: Xplora 2016-01-21 22:07:08

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

感謝您的回答。你所做的是有效的任何財產文件,但消息是一個國際化的文件。如果客戶端的語言環境設置爲其他語言,則我認爲這將起作用。我的意思是,你不讀取message_de,message_es,message_fr等。除此之外,所有的消息已經被系統讀取。如果我能避免這種情況,我不會再閱讀它們。 – Luixv 2010-01-14 14:28:36

+0

很好的答案。謝謝 – Gervase 2012-08-16 14:26:53

+4

只是從類路徑加載通知使用'properties.load(getClass()。getClassLoader()。getResourceAsStream(「message。()「))' – banterCZ 2014-01-31 07:38:09

2

這不是閱讀message.properties爲國際化的最佳實踐。您可以使用:

message(code:"capacity.created") 

在控制器作爲@Luixv建議或注射豆messageSource

messageSource.getMessage("capacity.created", 
         [].toArray(), "Capacity Created.", null) 
任何其他春天

/Grails的豆。