Grails 2.0和servletContext

时间:2011-11-23 22:18:26

标签: grails servlets grails-2.0

我正在尝试像这样访问一个控制器中的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

提前致谢

1 个答案:

答案 0 :(得分:5)

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

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

Burt Beckwith撰写了几篇关于该主题的精彩博文:Accessing the GrailsApplication and ApplicationContext from domain classes without holdersCreate your own Grails holder class