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
}
}
我替换上面一行代码与下面的代码,它工作得很好:)我没有 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 !!!)
请告诉我为什么它被分级..有更好的解决方案的任何人请分享 – Nishant
你的servlet无法访问FacesContext的,如果你不遵循面孔servlet映射URL。
例如,在任何Oracle ADF应用程序的默认JSF Servlet的URL映射为/面/ * 所以,如果你把你的servlet具有相同的映射,在Faces上下文将不能为空。
例如,使您的Servlet URL映射如下/faces/myCoolServlet 它会工作的很好。
请发布相关代码和异常stacktrace – Jayan
它不是“servletContext”吗? – MohamedSanaulla
请告诉我为什么我的问题解决方案下来分级..任何人有更好的解决方案,请分享 – Nishant