Grails 2.0和servletContext

vec*_*tor 2 grails servlets grails-2.0

我试图在这样的控制器中访问servletContext,但不断获取空指针异常:

def servletContext = getServletContext()
def serverPath  = servletContext.getRealPath("/")
Run Code Online (Sandbox Code Playgroud)

...我刚刚在邮件列表上遇到过这个问题,但建议的唯一"正确"解决方法是在BootStrap.groovy的init闭包中设置它:

   import org.codehaus.groovy.grails.web.context.ServletContextHolder as SCH

class BootStrap {

    def init = { servletContext ->

         SCH.servletContext = servletContext
    }
....
Run Code Online (Sandbox Code Playgroud)

......这仍然是这样吗?这个解决方案对我没有任何影响,仍然有NPE

提前致谢

ata*_*lor 5

servletContext是一个弹簧bean,如果def servletContext在控制器中声明,它将自动注入.

持有人物品正在消失.获取ServletContext或ApplicationContext的推荐方法是通过grailsApplicationspring bean.对于无法访问的情况grailsApplication(例如静态方法),您可以创建自己的持有者类.

Burt Beckwith撰写了几篇关于该主题的精彩博文:从没有持有者的域类访问GrailsApplication和ApplicationContext,创建自己的Grails holder类.