0

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

  }
}
4

2 回答 2

0

如果您不遵循 Faces servlet 映射 URL,您的 servlet 将无法访问 FacesContext。

例如,在任何 oracle ADF 应用程序中,默认的 JSF Servlet URL 映射是/faces/* 因此,如果您将 servlet 设置为具有相同的映射,Faces Context 将不会为空。

例如,使您的 Servlet URL 映射如下所示/faces/myCoolServlet 并且它会正常工作。

于 2013-09-29T13:52:18.487 回答
-1

我用下面的代码替换了上面的代码行,它工作正常:) 我没有访问抛出空指针的 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 :)(耶!!!)

于 2013-10-02T15:25:40.720 回答