Search code examples
ajaxjsongrailsrender

Using g.render in a grails service


I'm trying to use g.render in a grails service, but it appears that g is not provided to services by default. Is there a way to get the templating engine to render a view in the service? I may be going about this the wrong way. What I'm looking to to is render the view from a partial template to a string, and send the resulting string back as part of a JSON response to be used with AJAX updates.

Any thoughts?


Solution

  • 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.