我们有一个存储在S3上的gsp,以允许实时更新。该文件必须保留在S3上。我正在检索文件并使用Grails模板引擎来渲染它。但是,当从Quartz作业调用此代码时,我收到“请求未附加”错误,因为作业未在请求上下文中执行。
我正在读我应该使用PageRenderer,它包含在Grails 2.x +中。但是,PageRenderer似乎只支持从相对路径读取模板(即它希望您在本地使用它)。有人可以教我使用PageRenderer而不是从文件中渲染模板,而是使用String吗?我也尝试过使用url作为模板路径,但那里没有运气。
想法?
答案 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()