有时候ManagedBean不是一个new能解决问题的,有些JSF的东西必须要在JSF的周期里面才有的, 有时没办法,可能要在一个jsp页面采访JSF配置好的bean的一些方法。
1.如何获取到FacesContext
import javax.faces.FactoryFinder;
import javax.faces.context.FacesContext;
import javax.faces.context.FacesContextFactory;
import javax.faces.lifecycle.Lifecycle;
import javax.faces.lifecycle.LifecycleFactory;
import javax.servlet.ServletContext;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
/**
* Get the FacesContext even it is not in JSF lifecycle,网上找到的
* @param context
* @param request
* @param response
* @return FacesContext
*/
public static FacesContext getFacesContext(ServletContext context, ServletRequest request, ServletResponse response) {
FacesContext facesContext = FacesContext.getCurrentInstance();
if (facesContext != null)
return 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);
facesContext = contextFactory.getFacesContext(context, 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;
}
// 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);
}
}
2. 如何获取到MangedBean
/**
* Get the Managed bean in JSF.
* @param ctx
* @param beanName
* @return
*/
public static Object getManagedBean(FacesContext ctx, String beanName) {
return ctx.getApplication().getVariableResolver().resolveVariable(ctx, beanName);
}
本文转载自:
http://blog.csdn.net/zealvampire/article/details/1602768