在 Grails 3 rest-api profile app 的服务中将模板呈现为字符串
Render a template as string in a service in Grails 3 rest-api profile app
我创建了一个具有 rest-api
配置文件的 Grails 3.2.1
应用程序,并希望将 GSP 模板呈现为字符串。为此,我首先在 build.gradle
中添加了 apply plugin:"org.grails.grails-gsp"
,然后根据 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 中,注入 groovyPageRenderer
类型 PageRenderer 的 bean 非常简单,但我认为,Grails 3 中不再使用该 bean 和 class。
对于使用 web
配置文件创建的 Grails 3 应用程序,他们始终可以使用 link Grails render view from service?.
中给出的 groovyPageRenderer
对于使用 rest-api
配置文件创建的应用程序,他们只需要在 dependencies
块下的 build.gradle
中添加以下内容:
compile "org.grails:grails-plugin-gsp:3.2.1"
上面的 link 也将按原样工作。
为了描述方便,注入bean并使用render
方法:
PageRenderer groovyPageRenderer
def someMethod() {
println groovyPageRenderer.render(template: "/email-templates/signup", model: [foo: "bar"])
}
对于 Grails 3.3.x,一些插件已被外部化,工件 ID 已更改。
请参考here.
因此,要确保 groovyPageRenderer
bean 已注册,请添加
compile "org.grails.plugins:gsp"
到 build.gradle
中的 dependencies block
而不是
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
文件。
希望对您有所帮助。
我创建了一个具有 rest-api
配置文件的 Grails 3.2.1
应用程序,并希望将 GSP 模板呈现为字符串。为此,我首先在 build.gradle
中添加了 apply plugin:"org.grails.grails-gsp"
,然后根据 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 中,注入 groovyPageRenderer
类型 PageRenderer 的 bean 非常简单,但我认为,Grails 3 中不再使用该 bean 和 class。
对于使用 web
配置文件创建的 Grails 3 应用程序,他们始终可以使用 link Grails render view from service?.
groovyPageRenderer
对于使用 rest-api
配置文件创建的应用程序,他们只需要在 dependencies
块下的 build.gradle
中添加以下内容:
compile "org.grails:grails-plugin-gsp:3.2.1"
上面的 link 也将按原样工作。
为了描述方便,注入bean并使用render
方法:
PageRenderer groovyPageRenderer
def someMethod() {
println groovyPageRenderer.render(template: "/email-templates/signup", model: [foo: "bar"])
}
对于 Grails 3.3.x,一些插件已被外部化,工件 ID 已更改。
请参考here.
因此,要确保 groovyPageRenderer
bean 已注册,请添加
compile "org.grails.plugins:gsp"
到 build.gradle
中的 dependencies block
而不是
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
文件。
希望对您有所帮助。