2011-08-02 3 views
2

私のドメインクラスのtoStringメソッドでg.message()機能を利用したいが、デフォルトでg.-namespaceにアクセスすることはできない。 私はimport g.*がそのトリックをするのではないかと疑います。ドメインクラスのg.-namespaceにアクセスする方法

私は既にmessageSource機能を使用できることを知っていますが、ビューと同じ構文を使用する方が良いでしょう。

を使用でき
+0

どの回答を受け入れるかを決めるのは容易ではありませんでした。どちらも良いです。だから私は投票数を決めました。 – rdmueller

答えて

4

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')

+1

Grails 2.0では 'ApplicationHolder'が廃止されましたが、(javadocによると(http://grails.org/doc/2.0.x/api/org /codehaus/groovy/grails/commons/ApplicationHolder.html))、*依存プラグインを使用するか、代わりにGrailsApplicationAwareを実装する必要があります* –

+0

すてきな解決策ですが、面倒ではありません。 'ApplicationTagLib'の短縮名はありませんか? messageSourceは 'def messageSource'を介して簡単に注入できますが、APIはロケールを必要とします(afaik)。 – rdmueller

+1

OK、より面白く見える場合、 'import org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib' +' .getBean(ApplicationTagLib) 'を使用できます:) –

2

Using g.render in a grails serviceは、 "G" を使用するためにどのようにいくつかのヒントがあります。私はこれをテストしていませんが、ドメインクラスではほとんど同じように動作しますが、ドメインクラスはアプリケーションコンテキストに存在するBeanではないため、InitializingBeanを使用できません。

+0

これをちょうどテストしました。それは動作しますが、もっと簡単な解決策を見つけることを望みました... ApplicationTagLibがサービスとして注入されるかもしれない解決策...どのような種類のサービスが注入に利用可能であるかをどのように知っていますか?どこかにリストがありますか? – rdmueller

+1

appinfoプラグインは、注入可能なものの概要を示します。 –

関連する問題