我需要在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
答案 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或代码并从中呈现消息。