私のドメインクラスのtoStringメソッドでg.message()機能を利用したいが、デフォルトでg.-namespaceにアクセスすることはできない。 私はimport g.*
がそのトリックをするのではないかと疑います。ドメインクラスのg.-namespaceにアクセスする方法
私は既にmessageSource
機能を使用できることを知っていますが、ビューと同じ構文を使用する方が良いでしょう。
私のドメインクラスのtoStringメソッドでg.message()機能を利用したいが、デフォルトでg.-namespaceにアクセスすることはできない。 私はimport g.*
がそのトリックをするのではないかと疑います。ドメインクラスのg.-namespaceにアクセスする方法
私は既にmessageSource
機能を使用できることを知っていますが、ビューと同じ構文を使用する方が良いでしょう。
:
class MyDomain {
def someMethod() {
def g = ApplicationHolder.application.mainContext.getBean('org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib')
return g.message(....)
}
}
または他のあなたが直接messageSource
を得ることができます。サービスに:ApplicationHolder.application.mainContext.getBean('messageSource')
Grails 2.0では 'ApplicationHolder'が廃止されましたが、(javadocによると(http://grails.org/doc/2.0.x/api/org /codehaus/groovy/grails/commons/ApplicationHolder.html))、*依存プラグインを使用するか、代わりにGrailsApplicationAwareを実装する必要があります* –
すてきな解決策ですが、面倒ではありません。 'ApplicationTagLib'の短縮名はありませんか? messageSourceは 'def messageSource'を介して簡単に注入できますが、APIはロケールを必要とします(afaik)。 – rdmueller
OK、より面白く見える場合、 'import org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib' +' .getBean(ApplicationTagLib) 'を使用できます:) –
Using g.render in a grails serviceは、 "G" を使用するためにどのようにいくつかのヒントがあります。私はこれをテストしていませんが、ドメインクラスではほとんど同じように動作しますが、ドメインクラスはアプリケーションコンテキストに存在するBeanではないため、InitializingBeanを使用できません。
これをちょうどテストしました。それは動作しますが、もっと簡単な解決策を見つけることを望みました... ApplicationTagLibがサービスとして注入されるかもしれない解決策...どのような種類のサービスが注入に利用可能であるかをどのように知っていますか?どこかにリストがありますか? – rdmueller
appinfoプラグインは、注入可能なものの概要を示します。 –
どの回答を受け入れるかを決めるのは容易ではありませんでした。どちらも良いです。だから私は投票数を決めました。 – rdmueller