3

我创建了一个3.2.1带有配置文件的 Grails 应用程序,rest-api并希望将 GSP 模板呈现为字符串。为此,我首先添加,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)

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

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

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

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

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

4

2 回答 2

6

对于使用web配置文件创建的 Grails 3 应用程序,他们始终可以使用groovyPageRenderer链接中给出的Grails render view from service? .

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

compile "org.grails:grails-plugin-gsp:3.2.1"

上面的链接也将按原样工作。

只是为了描述,注入bean并使用render方法:

PageRenderer groovyPageRenderer

def someMethod() {
    println groovyPageRenderer.render(template: "/email-templates/signup", model: [foo: "bar"])
}
于 2016-10-23T14:16:15.860 回答
5

对于 Grails 3.3.x,很少有插件被外部化,并且人工制品 id 也发生了变化。

请参考这里

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

compile "org.grails.plugins:gsp"

dependencies blockinbuild.gradle而不是

compile "org.grails:grails-plugin-gsp"

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

logger('grails.plugins', TRACE)

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

Grails plug-in [groovyPages] with version [3.3.x] loaded successfully

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

apply plugin:"org.grails.grails-gsp"

到你的build.gradle文件。

我希望这有帮助。

于 2018-05-26T04:46:34.423 回答