2011-08-02 3 views
2

내 도메인 클래스의 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를 얻을 수 있습니다 :

+0

어느 대답을 받아 들일지를 결정하는 것은 쉽지 않았습니다. 둘다 좋다. 그래서 투표 수를 결정했습니다 .. – rdmueller

답변

4

당신은 사용할 수 있습니다 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는 로켈을 필요로한다. – rdmueller

+1

괜찮 으면,'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 플러그인은 무엇을 주입 할 수 있는지에 대한 개요를 제공합니다. –

관련 문제