FacesContext中getExternalContext中的NullpointerException

时间:2011-11-28 18:23:38

标签: java jsf

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

ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();

什么可能导致问题?

1 个答案:

答案 0 :(得分:10)

只有在FacesContext#getCurrentInstance()返回null时才会导致此错误。任何访问或调用null引用的尝试都将导致NullPointerException。另请参阅its javadoc

  

当应用程序在需要对象的情况下尝试使用null时抛出。其中包括:

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

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

FacesContext#getCurrentInstance()返回null只会导致只有在JSF上下文中执行了 的代码行,即代码为时才会导致FacesServlet返回FacesContext不是ThreadLocal提供的HTTP请求期间运行,FacesServlet负责将FacesServlet创建为{{1}}。例如,在普通的servlet,servlet过滤器或servlet监听器中,或在运行{{1}}的HTTP请求期间未执行的任何其他代码。

如何正确解决问题取决于功能要求,问题尚不清楚。通常,您要么确保HTTP请求通过{{1}}运行,要么通过备用方式访问您正在查找的信息,这更适合代码当前运行的上下文。