soufan

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  22 随笔 :: 0 文章 :: 0 评论 :: 0 Trackbacks

(转) Filter和Servlet中如何访问FacesContext?

 

在 Faces realm外,例如 在  filter 或者servlet中,当 FacesContent.getCurrentInstance() 返回null时候,你可以使用FacesContextFactory来得到FacesContext,下面是一个示例.


// You need an inner class to be able to call FacesContext.setCurrentInstance
// since it's a protected method
private abstract static class InnerFacesContext extends FacesContext
{
  protected static void setFacesContextAsCurrentInstance(FacesContext facesContext) {
    FacesContext.setCurrentInstance(facesContext);
  }
}

private FacesContext getFacesContext(ServletRequest request, ServletResponse response) {
  // Try to get it first
  FacesContext facesContext = FacesContext.getCurrentInstance();
  if (facesContext != nullreturn facesContext;

  FacesContextFactory contextFactory = (FacesContextFactory)FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
  LifecycleFactory lifecycleFactory = (LifecycleFactory)FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
  Lifecycle lifecycle = lifecycleFactory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);

  // Either set a private member servletContext = filterConfig.getServletContext();
  // in you filter init() method or set it here like this:
  // ServletContext servletContext = ((HttpServletRequest)request).getSession().getServletContext();
  // Note that the above line would fail if you are using any other protocol than http

  // Doesn't set this instance as the current instance of FacesContext.getCurrentInstance
  facesContext = contextFactory.getFacesContext(servletContext, request, response, lifecycle);

  // Set using our inner class
  InnerFacesContext.setFacesContextAsCurrentInstance(facesContext);

  // set a new viewRoot, otherwise context.getViewRoot returns null
  UIViewRoot view = facesContext.getApplication().getViewHandler().createView(facesContext, "yourOwnID");
facesContext.setViewRoot(view);

  return facesContext;
}
posted on 2006-12-19 15:52 soufan 阅读(419) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: