Wiki

Clone wiki

Oracle JSF Expert 1Z0-896 / Handle life cycle events

Handle life cycle events

javax.faces.event.PhaseListener interface

public interface PhaseListener extends java.util.EventListener, java.io.Serializable {

    public void afterPhase(PhaseEvent event);

    public void beforePhase(PhaseEvent event);

    PhaseId getPhaseId();

}

Implementing a Custom Phase Listener using f:phaseListener

@Named
public class MyPhaseListener implements PhaseListener {

    @Overrides
    public void afterPhase(PhaseEvent event) {
        if (PhaseId.APPLY_REQUEST_VALUES.equals(event.getPhaseId()) {
            // Do something
        } else if (PhaseId.APPLY_REQUEST_VALUES.equals(event.getPhaseId()) {
            // Do something
        } else if (PhaseId.INVOKE_APPLICATION.equals(event.getPhaseId()) {
            // Do something
        } else if (PhaseId.PROCESS_VALIDATIONS.equals(event.getPhaseId()) {
            // Do something
        } else if (PhaseId.RENDER_RESPONSE.equals(event.getPhaseId()) {
            // Do something
        } else if (PhaseId.RESTORE_VIEW.equals(event.getPhaseId()) {
            // Do something
        } else if (PhaseId.UPDATE_MODEL_VALUES.equals(event.getPhaseId()) {
            // Do something
        }
    }

    @Overrides
    public void beforePhase(PhaseEvent event) {
        if (PhaseId.APPLY_REQUEST_VALUES.equals(event.getPhaseId()) {
            // Do something
        } else if (PhaseId.APPLY_REQUEST_VALUES.equals(event.getPhaseId()) {
            // Do something
        } else if (PhaseId.INVOKE_APPLICATION.equals(event.getPhaseId()) {
            // Do something
        } else if (PhaseId.PROCESS_VALIDATIONS.equals(event.getPhaseId()) {
            // Do something
        } else if (PhaseId.RENDER_RESPONSE.equals(event.getPhaseId()) {
            // Do something
        } else if (PhaseId.RESTORE_VIEW.equals(event.getPhaseId()) {
            // Do something
        } else if (PhaseId.UPDATE_MODEL_VALUES.equals(event.getPhaseId()) {
            // Do something
        }
    }

    @Overrides
    public PhaseId getPhaseId() {
        return PhaseId.ANY_PHASE;
    }

}
<h:commandButton value="Submit">
    <f:phaseListener binding="#{myPhaseListener}" />
</h:commandButton>

Registering an application wide PhaseListener using faces-config.xml

<lifecycle>
    <phase-listener>com.example.MyPhaseListener</phase-listener>
</lifecycle>

Using f:view beforePhase and afterPhase to register phase event methods

@Named
public class MyBean {
    public void doSomethingBeforePhase(PhaseEvent event) {
        // Do something
    }

    public void doSomethingAfterPhase(PhaseEvent event) {
        // Do something
    }
}
<f:view beforePhase="#{myBean.doSomethingBeforePhase}" afterPhase="#{myBean.doSomethingAfterPhase}">
   ...
</f:view>

Using f:event to handle life cycle events

@Named
public class MyBean {
    public void preRenderView() {
    }

    public void preRenderComponent() {
    }

    public void preValidate() {
    }

    public void postValidate() {
    }

    public void postAddToView() {
    }
}
<f:event type="preRenderView" listener="#{myBean.preRenderView}" />

Updated