2010-01-13 75 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的豆。