2

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

我正在阅读我应该使用 Grails 2.x+ 中包含的 PageRenderer。然而,PageRenderer 似乎只支持从相对路径读取模板(即它希望您在本地拥有它)。有人可以教我一种使用 PageRenderer 渲染模板的方法,而不是从文件中,而是从字符串中?我也已经尝试使用 url 作为模板路径,但没有运气。

想法?

4

2 回答 2

2

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

于 2013-08-01T20:38:49.497 回答
0

查看这个线程,您似乎可以使用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()
于 2013-08-01T19:37:09.563 回答