我正在尝试像这样访问 Controller 中的 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
提前致谢
最佳答案
servletContext
是一个 spring bean,如果您在 Controller 中声明 def servletContext
,它将自动注入(inject)。
持有者对象正在消失。获取 ServletContext 或 ApplicationContext 的推荐方法是通过 grailsApplication spring bean。对于无法访问 grailsApplication
的情况(例如静态方法),您可以创建自己的持有者类。
Burt Beckwith 就该主题撰写了几篇精彩的博客文章:Accessing the GrailsApplication and ApplicationContext from domain classes without holders和 Create your own Grails holder class .
关于Grails 2.0 和 servletContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8249843/