如何在src / groovy中正确获取'messageSource'?

时间:2013-01-16 07:17:22

标签: spring grails internationalization

我需要在messageSource的课程中获取src\groovy。这个类在UrlMappings.groovy中使用,在我使用这个类的阶段,应用程序尚未完全启动。

目前我正在使用以下功能:

MessageSource messageSource = ApplicationHolder.application.mainContext.getBean('messageSource')
String message = messageSource.getMessage("code", null, "default", locale)

但不推荐ApplicationHolder,有没有办法在不使用ApplicationHolder的情况下实现同一目标?

//我正在使用Grails 2.0.1

4 个答案:

答案 0 :(得分:7)

根据我有限的经验,我发现在POGO中获取messageSource的最简单方法就是:

Holders.applicationContext.getBean("messageSource")

我尝试的其他方法(实施MessageSourceAware或添加@Component / @Autowired注释)导致其他并发症。

答案 1 :(得分:2)

试试这个:

grails.util.GrailsWebUtil.currentApplication().mainContext.messageSource

答案 2 :(得分:1)

推荐的方式似乎是http://burtbeckwith.com/blog/?p=1017

即。在src/groovy中创建一个实现ApplicationContextAware的单例bean,然后在factoryMethod中配置它的grails-app/conf/spring/resources.groovy属性。

答案 3 :(得分:0)

我从不喜欢使用Holders,这是Holders,GrailsWebUtil等正在做的事情。相反,您可以通过执行以下操作在服务中注入grailsApplication:

class SomeService {
   def grailsApplication
   ...
}

然后使用它来获取消息:

String message = grailsApplication.mainContext.getMessage(err, Locale.getDefault()).

Viola接受任何FieldError,ObjectError或代码并从中呈现消息。