2

我需要messageSourcesrc\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

4 回答 4

8

根据我有限的经验,我发现获得messageSourcePOGO 的最简单方法很简单:

Holders.applicationContext.getBean("messageSource")

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

于 2013-12-06T21:56:08.663 回答
2

尝试这个:

grails.util.GrailsWebUtil.currentApplication().mainContext.messageSource
于 2013-01-16T08:08:06.250 回答
1

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

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

于 2013-01-17T14:05:55.067 回答
-1

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

class SomeService {
   def grailsApplication
   ...
}

然后使用它来获取呈现的消息:

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

Viola 获取任何 FieldError、ObjectError 或代码并从中呈现消息。

于 2015-04-25T16:28:38.133 回答