Servlet中的JSFUtils.resolveExpression(“#{sessioncontext}”)中的空指针异常

Servlet中的JSFUtils.resolveExpression(“#{sessioncontext}”)中的空指针异常

问题描述:

我正在使用Servlets,并试图使用ADF中的JSFUtils.resolveExpression(“#{sessioncontext}”)方法检索会话上下文但它给了我一个空指针异常。 以上使用的方法有什么问题和 有没有另一种方法来检索我的Servlet中的sessioncontext?Servlet中的JSFUtils.resolveExpression(“#{sessioncontext}”)中的空指针异常

感谢,

编辑:请看看下面的代码,

public class MyServlet extends HttpServlet { 


public final void init(final ServletConfig config) throws ServletException { 
    super.init(config); 
} 

public void doGet(HttpServletRequest request, 
       HttpServletResponse response) 
     throws ServletException, IOException 
{ 
    response.setContentType("text/html"); 
    PrintWriter out = response.getWriter(); 
SessionContext session = (SessionContext) JSFUtils.resolveExpression("#{sessioncontext}"); 
    //more code below 

    } 
} 
+0

请发布相关代码和异常stacktrace – Jayan

+0

它不是“servletContext”吗? – MohamedSanaulla

+0

请告诉我为什么我的问题解决方案下来分级..任何人有更好的解决方案,请分享 – Nishant

我替换上面一行代码与下面的代码,它工作得很好:)我没有 acesss到FacesContext中这是抛出一个空指针

FacesContext facesContext = FacesContext.getCurrentInstance(); 
    if (facesContext == null) { 
     FacesContextFactory contextFactory = 
      (FacesContextFactory) FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY); 
     LifecycleFactory lifecycleFactory = 
      (LifecycleFactory) FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY); 
     Lifecycle lifecycle = 
      lifecycleFactory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE); 
     facesContext = 
       contextFactory.getFacesContext(request.getSession().getServletContext(), 
               request, response, 
               lifecycle); 
     // Below is an Inner Class which extends FacesContext to use its below protected method 
     AbstractInnerFacesContext.setFacesContextAsCurrentInstance(facesContext); 
    } 

,因为现在我有FacesContext中我可以很容易从这个使用resolveExpression方法使用相同的逻辑回顾SessionContext :)(Yay !!!)

+0

请告诉我为什么它被分级..有更好的解决方案的任何人请分享 – Nishant

你的servlet无法访问FacesContext的,如果你不遵循面孔servlet映射URL。

例如,在任何Oracle ADF应用程序的默认JSF Servlet的URL映射为/面/ * 所以,如果你把你的servlet具有相同的映射,在Faces上下文将不能为空。

例如,使您的Servlet URL映射如下/faces/myCoolServlet 它会工作的很好。

+0

感谢您的答复。但是我没有使用FacesServlet我的servlet扩展了简单的HTTPServlet接口。请找到代码更新以上 – Nishant

+0

它并不是必须的,FacesServlet是负责创建FacesContext对象的代码,所以如果您希望FacesContext不为空,您将不得不遵循Faces Servlet Servlet映射URL模式 –

+0

请请参阅上面的答案。我不认为我有任何映射问题。我的web.xml文件将所有FacesServlet映射为/ faces/*,而其他映射则具有其常规映射。 – Nishant