FacesContext中getExternalContext中的NullpointerException

Bes*_*est 1 java jsf

我尝试从FacesContext获取外部上下文,并获得NullPointerException:

ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
Run Code Online (Sandbox Code Playgroud)

什么可能导致问题?

Bal*_*usC 10

它只能在FacesContext#getCurrentInstance()返回时引起null.任何访问或调用null引用的尝试都将导致NullPointerException.另见它的javadoc:

在应用程序尝试null在需要对象的情况下使用时抛出.这些包括:

  • 调用null对象的实例方法.
  • 访问或修改null对象的字段.
  • 取长度,null好像它是一个数组.
  • 访问或修改插槽,null就好像它是一个阵列一样.
  • 投掷null就像是一个Throwable价值.

应用程序应抛出此类的实例以指示该null对象的其他非法使用.

如果代码行没有在JSF上下文中执行,那么FacesContext#getCurrentInstance()返回null只会导致代码在HTTP请求期间没有运行,而HTTP请求是由负责创建as的人提供的.例如,在普通的servlet,servlet过滤器或servlet监听器中,或者在运行该请求的HTTP请求期间未执行的任何其他代码.FacesServletFacesContextThreadLocalFacesServlet

如何正确地解决它取决于功能要求,这个问题不明确.通常,您要么确保HTTP请求运行FacesServlet,要么通过备用方式访问您正在查找的信息,这更适合代码当前运行的上下文.