在Grails 3 rest-api配置文件应用程序中的服务中将模板呈现为字符串

时间:2016-10-23 11:44:51

标签: spring grails grails3

我已经创建了一个带有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和类。

2 个答案:

答案 0 :(得分:4)

对于使用web个人资料创建的Grails 3应用,他们始终可以使用链接Grails render view from service?中提供的groovyPageRenderer

对于使用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"])
}

答案 1 :(得分:3)

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

请参阅here

因此,为确保groovyPageRenderer bean已注册,请添加

compile "org.grails.plugins:gsp"

dependencies block中的build.gradle而不是

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

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

logger('grails.plugins', TRACE)
<{1>}文件中的

。您应该在控制台日志中看到类似的内容。

logback.groovy

对于Grails plug-in [groovyPages] with version [3.3.x] loaded successfully 并将其添加到compiling GSP files包中,请添加

war/jar

到您的apply plugin:"org.grails.grails-gsp" 文件。

我希望这会有所帮助。