2012-07-10 43 views

回答

3

你可以连接到使用<f:phaseListener>代码的网页上这样的UIViewRoot的阶段监听器:

List<PhaseListener> phaseListeners = FacesContext.getCurrentInstance().getViewRoot().getPhaseListeners(); 

它返回附加到此UIViewRoot实例的PhaseListener实例的列表。

如果你想获得所有在faces-config.xml文件中注册的全球阶段监听器,你可以从的LifeCycle实例像这样让他们:

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(); 
} 

Documentation UIViewRoot

Documentation LifeCycle

-1

您可以在JSF 2.0中获得当前PhaseID:

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

你没有回答这个问题。 OP询问如何获取当前注册的PhaseListener,而不是如何获取当前的阶段ID,这确实太明显了。 – BalusC 2012-09-13 18:42:45