从外部源渲染Grails模板

时间:2013-08-01 18:03:15

标签: grails

我们有一个存储在S3上的gsp,以允许实时更新。该文件必须保留在S3上。我正在检索文件并使用Grails模板引擎来渲染它。但是,当从Quartz作业调用此代码时,我收到“请求未附加”错误,因为作业未在请求上下文中执行。

我正在读我应该使用PageRenderer,它包含在Grails 2.x +中。但是,PageRenderer似乎只支持从相对路径读取模板(即它希望您在本地使用它)。有人可以教我使用PageRenderer而不是从文件中渲染模板,而是使用String吗?我也尝试过使用url作为模板路径,但那里没有运气。

想法?

2 个答案:

答案 0 :(得分:2)

所以答案是相当微不足道的,尽管我需要进行大量的研究。如果您在请求上下文(即作业)之外使用groovyPagesTemplateEngine,则必须在调用template.make()方法的方法中模拟请求上下文。你必须编写一些代码并包含Spring依赖项来实现这一点,但现在Grails有一个可以使用的漂亮的小实用程序。只需在模板调用之前加入GrailsWebUtil.bindMockWebRequest(),您就可以了。

答案 1 :(得分:0)

查看at this thread,您似乎可以使用groovyPagesTemplateEngine转换模板中的字符串。例如:

// compile the gsp
def compiledContent = groovyPagesTemplateEngine.createTemplate(content, 'SomeUniqueIdForTheContentBeingRendered')

// render the gsp
def sw = new StringWriter()
compiledContent?.make(args)?.writeTo(sw)
String renderedContent = sw.toString()