使用渲染插件时遇到一些问题。它总是返回一个空指针异常。我看到了类似的严重问题,但我找不到我错的地方。
我的模板代码:/views/appRetail/_report.gsp
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-strict.dtd">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<title>Welcome to Production !</title>
</head>
<html>
<body>
REPORT
</body>
</html>
我的控制器代码:
class AppRetailController {
def pdfRenderingService
def renderFormPDF() {
def apps = App.findAll()
new File("test.pdf").withOutputStream { outputStream ->
pdfRenderingService.render(template: '/appRetail/report', model: [apps:apps], outputStream)
}
}
}
这是stacktrace:
2015-04-17 10:31:54,552 [http-bio-8080-exec-4] ERROR errors.GrailsExceptionResolver - NullPointerException occurred when processing request: [POST] /toolprod/appRetail/renderFormPDF
Stacktrace follows:
Message: null
Line | Method
->> 1281 | getPublicDeclaredMethods in java.beans.Introspector
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 1141 | getTargetMethodInfo in ''
| 416 | getBeanInfo . . . . . . in ''
| 163 | getBeanInfo in ''
| 31 | init . . . . . . . . . . in grails.plugin.rendering.document.RenderEnvironment
| 68 | with in ''
| 60 | with . . . . . . . . . . in ''
| 65 | generateXhtml in grails.plugin.rendering.document.XhtmlDocumentService
| 35 | createDocument . . . . . in ''
| 36 | render in grails.plugin.rendering.RenderingService
| 348 | doCall . . . . . . . . . in toolprod.AppRetailController$_renderFormPDF_closure1
| 347 | renderFormPDF in toolprod.AppRetailController
| 198 | doFilter . . . . . . . . in grails.plugin.cache.web.filter.PageFragmentCachingFilter
| 63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter
| 82 | doFilterInternal . . . . in com.linkedin.grails.profiler.ProfilerFilter
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run . . . . . . . . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 744 | run in java.lang.Thread
以下是我使用的版本:
答案 0 :(得分:7)
您需要在buildConfig文件中添加此依赖项:
dependencies {
runtime 'org.springframework:spring-test:4.1.6.RELEASE'
}
答案 1 :(得分:0)
从堆栈跟踪看起来withOutputStream
关闭会导致一些混乱,但它在测试应用程序中对我有用。尝试运行grails clean
和grails compile
并重新运行该应用。如果这不能解决问题,请删除目标目录并运行clean并再次编译。
如果仍然存在问题,可以通过几种不同的方式生成PDF。您可以获取生成的OutputStream
数组并自行编写,而不是将byte[]
传递给iText来呈现PDF,例如。
def renderFormPDF() {
def apps = App.findAll()
ByteArrayOutputStream baos = pdfRenderingService.render(template: '/appRetail/report', model: [apps: apps])
new File('test.pdf').withOutputStream { it.write baos.toByteArray() }
}
或
def renderFormPDF() {
def apps = App.findAll()
ByteArrayOutputStream baos = pdfRenderingService.render(template: '/appRetail/report', model: [apps: apps])
new File('test.pdf') << baos.toByteArray()
}