2013-09-29 41 views
0

我正在使用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

回答

-1

我替換上面一行代碼與下面的代碼,它工作得很好:)我沒有 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

0

你的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