Search code examples
grailsgrails-2.0

Grails groovyPageRenderer error: Cannot invoke method render() on null object


I cannot get the Grails groovyPage Renderer to work without this error. I have tried some various solutions but cannot seem to resolve it. I have tried it on Grails 2.1.1 and 2.4.4 with both servlet 2.5 and 3.0. Tried to follow the example on the blog below as well.

http://mrhaki.blogspot.com/2012/03/grails-goodness-render-gsp-views-and.html

Source:

class RenderTestController {

    static allowedMethods = [save: "POST", update: "PUT", delete: "DELETE"]

    def renderEx {
        def updateList= RenderService.updateRender()
    }

Service:

package renderexample

import grails.gsp.PageRenderer
import java.util.List;
import java.util.Map;

class RenderService {

    public static List updateRender() {

        PageRenderer groovyPageRenderer
        def gspReturn = []

        gspReturn = [-1, 1, 2]

        def htmlBody = groovyPageRenderer.render(template:'/emails/_renderUpdate', model: [results: gspReturn])

        println htmlBody

        return gspReturn
    }
}

Error 2015-08-10 15:39:45,801 [localhost-startStop-1] ERROR context.GrailsContextLoaderListener - Error initializing the application: Error creating bean with name 'renderexample.RenderTestController': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [renderexample.RenderTestController]: Constructor threw exception; nested exception is java.lang.NullPointerException: Cannot invoke method render() on null object

Message: Error creating bean with name 'renderexample.RenderTestController': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [renderexample.RenderTestController]: Constructor threw exception; nested exception is java.lang.NullPointerException: Cannot invoke method render() on null object Line | Method ->> 262 | run in java.util.concurrent.FutureTask

Any help is appreciated. Thanks.


Solution

  • I don't know why you want the updateRender method to be static. There is no good reason to do that.

    Try something like this...

    class RenderTestController {
    
        def renderService
    
        def renderEx() {
            def updateList= renderService.updateRender()
    
            // ...
        }
    
    }
    
    class RenderService {
    
        PageRenderer groovyPageRenderer
    
        List updateRender() {
    
            def gspReturn = []
    
            gspReturn = [-1, 1, 2]
    
            def htmlBody = groovyPageRenderer.render(template:'/emails/_renderUpdate', model: [results: gspReturn])
    
            // ...
        }
    }