在grails服务中使用g.render

aas*_*uki 18 ajax grails json render

我正在尝试在grails服务中使用g.render,但似乎默认情况下不向服务提供g.有没有办法让模板引擎在服务中呈现视图?我可能会以错误的方式解决这个问题.我想要的是将视图从部分模板呈现为字符串,并将结果字符串作为JSON响应的一部分发回,以便与AJAX更新一起使用.

有什么想法吗?

Ste*_*ter 27

我完全赞同约翰的论证 - 在服务中做GSP通常是一个糟糕的设计决定.但没有例外的规则!如果您仍想这样做,请尝试以下方法:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

使用gspTagLibraryLookup bean,您当然可以访问服务中的所有其他所需的taglib.


Dan*_*ner 14

现在使用PageRenderer在Grails 2中更简单.例如:

class SomeService {
    def groovyPageRenderer

    void someMethod() {
        String html = groovyPageRenderer.render(view: '/email/someTemplateName')
    }
}
Run Code Online (Sandbox Code Playgroud)

API - http://grails.org/doc/latest/api/grails/gsp/PageRenderer.html

更完整的示例 - http://mrhaki.blogspot.com/2012/03/grails-goodness-render-gsp-views-and.html