1

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

4

2 回答 2

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

文档 UIViewRoot

文档生命周期

于 2012-07-10T23:18:05.350 回答
-1

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

PhaseId currentPhaseId = FacesContext.getCurrentInstance().getCurrentPhaseId();
于 2012-09-13T17:08:05.097 回答