我正在尝试像这样访问一个控制器中的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
提前致谢
答案 0 :(得分:5)
servletContext
是一个弹簧bean,如果在控制器中声明def servletContext
,它将自动注入。
持有人物品正在消失。获取ServletContext或ApplicationContext的建议方法是通过grailsApplication
spring bean。对于无法访问grailsApplication
的情况(例如静态方法),您可以创建自己的持有者类。
Burt Beckwith撰写了几篇关于该主题的精彩博文:Accessing the GrailsApplication and ApplicationContext from domain classes without holders和Create your own Grails holder class。