【发布时间】:2012-07-10 20:57:28
【问题描述】:
有没有办法通过 el 上下文或应用程序上下文获取 PhaseListener 的当前实例?
【问题讨论】:
标签: jsf jsf-2 phaselistener
有没有办法通过 el 上下文或应用程序上下文获取 PhaseListener 的当前实例?
【问题讨论】:
标签: jsf jsf-2 phaselistener
您可以在这样的页面上使用<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();
}
【讨论】:
您可以通过以下方式在 JSF 2.0 中获取当前 PhaseID:
PhaseId currentPhaseId = FacesContext.getCurrentInstance().getCurrentPhaseId();
【讨论】:
PhaseListeners,而不是如何获取当前阶段ID,这确实太明显了。