呈现响应阶段之前的 JSF 事件侦听器

JSF Event Listener before Render Response Phase

我想在达到呈现响应阶段之前首次加载表单时在 JSF 视图范围的辅助 bean 中进行一些处理。我不能在渲染响应阶段执行此过程,因为我有一个依赖于处理的动态包含。有没有我可以使用的事件侦听器或阶段侦听器?

您可以使用编程阶段侦听器我假设您使用的是 JSF2。 class 以下将在您的应用程序中加载阶段侦听器。

@ManagedBean(eager = true)
@ApplicationScoped
public class SomeClass implements Serializable {

    @PostConstruct
    private void initialize() {
        LifecycleFactory factory = (LifecycleFactory) FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY);
        Lifecycle lifecycle = factory.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
        lifecycle.addPhaseListener(new PhaseListenerImpl());

    }
}

在 class 下面,您可以在 beforePhase 方法中定义您的逻辑。

public class PhaseListenerImpl implements PhaseListener {   

@Override
public void afterPhase(PhaseEvent pe) {

    return;
}

@Override
public void beforePhase(PhaseEvent pe) {

    FacesContext fc = pe.getFacesContext();
    String viewId = fc.getViewRoot().getViewId();


        try {
            if(viewId==blah){
            //your logic goes here for your view
            }

        } catch (Exception e) {
            e.printStackTrace();

        }

    }       

@Override
public PhaseId getPhaseId() {
    return PhaseId.RENDER_RESPONSE;
}