2015-04-17 62 views
4

我在使用渲染插件时遇到了一些问题。它总是返回一个空指针异常。我看到了严重的类似问题,但是我没有找到我错在哪里。Grails渲染插件的空指针异常

  • 代码我的模板:/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 

这里是我使用的版本:

  • 插件版本:编译 “:渲染:1.0.0”
  • 的Grails版本:2.5.0

回答

0

从它的外观堆栈跟踪像withOutputStream封闭引起了一些混淆,但它在测试应用程序中为我工作。尝试运行grails cleangrails compile并重新运行该应用。如果没有解决这个问题,请删除目标目录并运行clean并重新编译。

如果仍然存在问题,可以使用几种不同的方法来生成PDF。您不必将OutputStream传递给iText来呈现PDF,您可以获取生成的byte[]数组并自己写入,例如,

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() 
} 
+0

感谢,但我始终具有相同的error.I也试图与renderPng: def file = new File(“test.png”) file.write(“hello”) renderPng(template:“/ appRetail/report”,model:[imageBytes:file.bytes]) – drieu

5

您需要添加这种依赖在你buildConfig文件:为你解答

dependencies { 
    runtime 'org.springframework:spring-test:4.1.6.RELEASE' 
} 
+0

解决err或获取依赖关系:无法找到工件org.springframework:spring-test:zip:4.1.6.RELEASE在grailsCentral(https://repo.grails.org/grails/plugins)中(使用--stacktrace查看完整跟踪) –