2

messageSourceのクラスに参加する必要がありsrc\groovyます。このクラスはで使用されており、このクラスを使用しUrlMappings.groovyている段階では、アプリケーションはまだ完全には起動されていません。

現在、私は以下を使用しており、それは機能します:

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

しかし、ApplicationHolderは非推奨です。使用せずに同じ目標を達成する方法はありApplicationHolderますか?

//Grails2.0.1を使用しています

4

4 に答える 4

8

messageSource私の限られた経験から、POGOに参加するための最も簡単なアプローチは単純であることがわかりました。

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のようです

src/groovyつまり、を実装するシングルトンBeanを作成し、その属性をでApplicationContextAware構成します。factoryMethodgrails-app/conf/spring/resources.groovy

于 2013-01-17T14:05:55.067 に答える
-1

私はHoldersやGrailsWebUtilなどが行っているシングルトンを使うのが好きではありません。代わりに、次のようにして、grailsApplicationをサービスに注入することができます。

class SomeService {
   def grailsApplication
   ...
}

次に、それを使用してメッセージをレンダリングします。

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

Violaは、FieldError、ObjectError、またはコードを取得し、そこからメッセージをレンダリングします。

于 2015-04-25T16:28:38.133 に答える