Java Servlet中JSFUtils.resolveExpression(";{sessioncontext}";)中的空指针异常

Java Servlet中JSFUtils.resolveExpression(";{sessioncontext}";)中的空指针异常,java,jakarta-ee,servlets,oracle-adf,sessioncontext,Java,Jakarta Ee,Servlets,Oracle Adf,Sessioncontext,我正在使用servlet,并试图使用ADF中的JSFUtils.resolveExpression(“#{sessioncontext}”)方法检索会话上下文,但它给了我一个空指针异常。 以上使用的方法和步骤有什么问题 有没有其他方法可以在我的Servlet中检索sessioncontext 谢谢 编辑:请查找下面的代码 public class MyServlet extends HttpServlet { public final void init(final ServletConfi

我正在使用servlet,并试图使用ADF中的JSFUtils.resolveExpression(“#{sessioncontext}”)方法检索会话上下文,但它给了我一个空指针异常。 以上使用的方法和步骤有什么问题 有没有其他方法可以在我的Servlet中检索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

  }
}

如果不遵循Faces servlet映射URL,则servlet无法访问FacesContext

例如,在任何oracle ADF应用程序中,默认的JSF Servlet URL映射为/faces/* 因此,如果将servlet设置为具有相同的映射,那么Faces上下文将不会为null

例如,使您的Servlet URL映射类似于下面的/faces/mycolservlet
它会工作得很好。

我用下面的代码替换了上面的代码行,它工作得很好:) 我没有访问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:)(耶!!!

请发布相关代码和异常stacktraceIs它不是“servletContext”吗?请告诉我为什么我的问题解决方案会降级。。任何有更好解决方案的人请分享,谢谢你的回复。但我没有使用FacesServlet,我的servlet扩展了简单的HTTPServlet接口。请查找上面更新的代码不必,FacesServlet是负责创建FacesContext对象的人,因此如果您希望FacesContext不为null,则必须遵循FacesServlet Servlet映射URL模式,请参见上面的回答。我认为我在映射方面没有任何问题。我的web.xml文件将所有FacesServlet映射为/faces/*而其他文件则具有普通映射。请告诉我为什么会降级。。有更好解决方案的人请分享