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运行,要么通过备用方式访问您正在查找的信息,这更适合代码当前运行的上下文。