最近我们将我们的应用程序从grails版本2.2.4升级到2.4.4。但我们陷入了一个与sitemesh过滤器相关的特定问题,该过滤器已从grails版本2.4.4中的web.xml中删除。
问题是,在我们的代码库(grails版本2.2.4)中,响应对象由 org.codehaus.groovy在运行时初始化。 grails.web.sitemesh.GrailsContentBufferingResponse (http://grails.org/doc/2.4.x/api/org/codehaus/groovy/grails/web/sitemesh/GrailsContentBufferingResponse.html)我们使用 response.response.contents 来获取渲染的gsp页面的html内容,然后将其用于pdf渲染在我们的应用程序的应用程序过滤器中。
pdfRenderer(uri: '/pdf/**') {
afterView = {
byte[] pdf = PdfUtils.makePdf(response.response.contents, params.title, params.avoidDefaultHeader ?: false, session.user, servletContext)
从grails版本2.4.4 sitemesh过滤器已替换为 GrailsLayoutView ,现在使用 weblogic httpServletResponse 初始化响应对象,该对象无法获取内容。现在我们必须将应用程序配置为在运行时使用 GrailsContentBufferingResponse ,以便使用它初始化响应对象。
这就是为什么我们的应用程序在所有pdf渲染的情况下都被破坏了。
任何人都可以告诉我如何配置GrailsLayoutView,以便在运行时使用GrailsContentBufferingResponse对象初始化响应对象。或者是否有任何其他方法可以使用sitemesh过滤器,以便应用程序在运行时使用GrailsContentBufferingResponse对象。
我还在https://jira.grails.org/browse/GRAILS-11896创建了一个jira问题。如果这确实是grails 2.4.4
中的错误,请访问并投票