2

我正在尝试像这样在控制器中访问 servletContext,但不断收到空指针异常:

def servletContext = getServletContext()
def serverPath  = servletContext.getRealPath("/")

...我最近在邮件列表中遇到过这个问题,但建议的唯一“正确”解决方法是将其设置在 BootStrap.groovy 的 init 闭包中:

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

class BootStrap {

    def init = { servletContext ->

         SCH.servletContext = servletContext
    }
....

……现在还是这样吗?该解决方案对我没有任何影响,仍然有 NPE

提前致谢

4

1 回答 1

5

servletContextdef servletContext是一个 spring bean,如果您在控制器中声明,它将自动注入。

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

Burt Beckwith 就该主题写了几篇很棒的博客文章:Accessing the GrailsApplication and ApplicationContext from domain classes without holderCreate your own Grails holder class

于 2011-11-23T22:31:00.677 回答