Using g.render in a grails service
I totally agree with John's argumentation - doing GSP in services is generally a bad design decision. But no rules without exceptions! If you still want to do this, try the following approach:
class MyService implements InitializingBean { boolean transactional = false def gspTagLibraryLookup // being automatically injected by spring def g public void afterPropertiesSet() { g = gspTagLibraryLookup.lookupNamespaceDispatcher("g") assert g } def serviceMethod() { // do anything with e.g. g.render }}
Using the gspTagLibraryLookup bean you can of course access every other desired taglib in a service.
It's even simpler now in Grails 2 with the PageRenderer. e.g.:
class SomeService { def groovyPageRenderer void someMethod() { String html = groovyPageRenderer.render(view: '/email/someTemplateName') }}
API - http://grails.org/doc/latest/api/grails/gsp/PageRenderer.html
More complete example - http://mrhaki.blogspot.com/2012/03/grails-goodness-render-gsp-views-and.html
My advice would be to do this in the controller. Service should have reusable logic and not depend on a view template, leave that work to the controller. Use the service to get the data you need to pass to the template, but leave the work of interacting with the template to the controller.