我正在使用Servlets,我试图使用ADF中的JSFUtils.resolveExpression("#{sessioncontext}")方法检索会话上下文,但是它给了我一个Null指针异常。上面使用的方法有什么问题,还有其他方法在我的Servlet中检索会话上下文吗?
谢谢,
编辑:请找到下面的代码,
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
}
}发布于 2013-10-02 15:25:40
我用下面的代码替换了上面的代码,它工作得很好:)我没有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!!)
发布于 2013-09-29 13:52:18
如果不遵循FacesContext映射URL,您的servlet就无法访问FacesContext。
例如,在任何oracle应用程序中,默认的JSF映射都是/ Faces /*,因此如果将Servlet放置为相同的映射,Faces上下文将不会为null。
例如,让Servlet映射类似于下面的/faces/myCoolServlet,它会正常工作。
https://stackoverflow.com/questions/19077990
复制相似问题