渲染响应阶段

时间:2015-12-31 09:30:18

标签: jsf-2 lifecycle

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

1 个答案:

答案 0 :(得分:0)

您可以使用程序化阶段监听器我假设您使用的是JSF2。下面的类将在您的应用程序中加载阶段监听器。

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

    }
}

在课程下面,你可以在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;
}