JSF2——从托管bean获取PhaseListener实例

JSF2——从托管bean获取PhaseListener实例,jsf,jsf-2,phaselistener,Jsf,Jsf 2,Phaselistener,有没有办法通过el上下文或应用程序上下文获取PhaseListener的当前实例?您可以使用以下页面上的标记将PhaseListener连接到UIViewRoot: List<PhaseListener> phaseListeners = FacesContext.getCurrentInstance().getViewRoot().getPhaseListeners(); FacesContextFactory contextFactory = (FacesContextFact

有没有办法通过el上下文或应用程序上下文获取PhaseListener的当前实例?

您可以使用以下页面上的
标记将PhaseListener连接到UIViewRoot:

List<PhaseListener> phaseListeners = FacesContext.getCurrentInstance().getViewRoot().getPhaseListeners();
FacesContextFactory contextFactory = (FacesContextFactory)FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);    
LifecycleFactory lifecycleFactory = (LifecycleFactory)FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
Iterator<String> lifecycleIds = lifecycleFactory.getLifecycleIds(); 
while (lifecycleIds.hasNext()) { 
    String lifecycleId = lifecycleIds.next(); 
    Lifecycle lifecycle = lifecycleFactory.getLifecycle(lifecycleId);
    PhaseListener[] phaseListeners= lifecycle.getPhaseListeners();
}
List phaseListeners=FacesContext.getCurrentInstance().getViewRoot().getPhaseListeners();
它返回附加到此UIViewRoot实例的PhaseListener实例的列表

如果要在faces-config.xml文件中注册所有全局阶段侦听器,可以从LifeCycle实例中获取它们,如下所示:

List<PhaseListener> phaseListeners = FacesContext.getCurrentInstance().getViewRoot().getPhaseListeners();
FacesContextFactory contextFactory = (FacesContextFactory)FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);    
LifecycleFactory lifecycleFactory = (LifecycleFactory)FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
Iterator<String> lifecycleIds = lifecycleFactory.getLifecycleIds(); 
while (lifecycleIds.hasNext()) { 
    String lifecycleId = lifecycleIds.next(); 
    Lifecycle lifecycle = lifecycleFactory.getLifecycle(lifecycleId);
    PhaseListener[] phaseListeners= lifecycle.getPhaseListeners();
}
FacesContextFactory contextFactory=(FacesContextFactory)FactoryFinder.getFactory(FactoryFinder.FACES\u CONTEXT\u FACTORY);
LifecycleFactory LifecycleFactory=(LifecycleFactory)FactoryFinder.getFactory(FactoryFinder.LIFECYCLE\u FACTORY);
迭代器lifecycleIds=lifecycleFactory.getLifecycleIds();
而(lifecycleIds.hasNext()){
字符串lifecycleId=lifecycleIds.next();
Lifecycle=lifecycleFactory.getLifecycle(lifecycleId);
PhaseListener[]phaseListeners=lifecycle.getPhaseListeners();
}


您可以通过以下方式获得JSF 2.0中的当前PhaseID:

PhaseId currentPhaseId = FacesContext.getCurrentInstance().getCurrentPhaseId();

你没有回答这个问题。OP询问的是如何获取当前注册的
PhaseListener
s,而不是如何获取当前的相位ID,这一点实在太明显了。