Wiki
Clone wikiOracle 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