FacesContext中getExternalContext中的NullpointerException
我尝试从FacesContext获取外部上下文,并获得NullPointerException:
ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
什么可能导致问题?
只有在FacesContext#getCurrentInstance()
返回null
才会导致它。 任何访问或调用null
引用的尝试都将导致NullPointerException
。 另见它的javadoc :
当应用程序在需要对象的情况下尝试使用
null
时抛出。 这些包括:
- 调用
null
对象的实例方法。- 访问或修改
null
对象的字段。- 将
null
的长度视为数组。- 访问或修改
null
的插槽,就像它是一个数组一样。- 抛出
null
,好像它是一个Throwable
值。应用程序应该抛出此类的实例以指示
null
对象的其他非法使用。
如果没有在JSF上下文中执行该行代码,即在FacesServlet
服务的HTTP请求期间代码没有运行,那么FacesContext#getCurrentInstance()
返回null
只会导致该问题。负责将FacesContext
创建为ThreadLocal
。 例如,在普通的servlet,servletfilter或servlet监听器中,或在运行FacesServlet
的HTTP请求期间未执行的任何其他代码。
如何正确地解决它取决于function要求,这个问题不明确。 通常,您要么确保HTTP请求通过FacesServlet
运行,要么通过备用方式访问您正在查找的信息,这更适合代码当前运行的上下文。