在Grails 3 rest-api配置文件应用程序中的服务中以字符串形式渲染模板

Sha*_*wal 2 grails spring grails3

我已经创建了3.2.1带有rest-api配置文件的Grails 应用程序,并希望将GSP模板呈现为String。为此,我先加入,apply plugin:"org.grails.grails-gsp"build.gradle随后的基础上的代码ResponseRenderer,我试过下面来呈现我的GSP模板:

def viewResolver = applicationContext.getBean(CompositeViewResolver.BEAN_NAME, CompositeViewResolver)

View view = viewResolver.resolveView("/email-templates/signup", null)
Run Code Online (Sandbox Code Playgroud)

但是view对象总是null。然后,我也尝试了以下方法,但没有成功:

[ViewResolverComposite, GroovyMarkupViewResolver, GenericGroovyTemplateViewResolver].each {
    def viewResolver = applicationContext.getBean(it)

    View view = viewResolver.resolveViewName("/email-templates/signup", null)
    println view?.dump()
}
Run Code Online (Sandbox Code Playgroud)

我的模板位于grails-app/views/emails-templates/_signup.gsp

在Grails 2中,通过注入groovyPageRenderer类型为PageRenderer的 bean 非常简单,但我认为,Grails 3中不再使用该bean和类。

Sha*_*wal 5

对于使用web配置文件创建的Grails 3应用,他们始终可以使用服务中Grails渲染视图groovyPageRenderer链接中给定的

对于使用rest-api配置文件创建的应用,他们只需要在build.gradle下面的dependencies块中添加以下内容:

compile "org.grails:grails-plugin-gsp:3.2.1"
Run Code Online (Sandbox Code Playgroud)

上面的链接也将照常工作。

仅出于描述目的,注入bean并使用render方法:

PageRenderer groovyPageRenderer

def someMethod() {
    println groovyPageRenderer.render(template: "/email-templates/signup", model: [foo: "bar"])
}
Run Code Online (Sandbox Code Playgroud)


Nik*_*rma 5

对于 Grails 3.3.x,很少有插件已被外部化,并且人工制品 ID 已更改。

请参考这里

因此,要确保groovyPageRendererbean 已注册,请添加

compile "org.grails.plugins:gsp"
Run Code Online (Sandbox Code Playgroud)

dependencies blockinbuild.gradle而不是

compile "org.grails:grails-plugin-gsp"
Run Code Online (Sandbox Code Playgroud)

只是为了确保插件在您的应用程序中成功初始化,添加

logger('grails.plugins', TRACE)
Run Code Online (Sandbox Code Playgroud)

logback.groovy文件中。您应该在控制台日志中看到类似的内容。

Grails plug-in [groovyPages] with version [3.3.x] loaded successfully
Run Code Online (Sandbox Code Playgroud)

对于compiling GSP files并将其添加到war/jar包中,添加

apply plugin:"org.grails.grails-gsp"
Run Code Online (Sandbox Code Playgroud)

到您的build.gradle文件。

我希望这有帮助。