編集:私はBalusCの答えがおそらくこの問題を解決するための好ましい方法であるべきであることを指摘する必要があります。ただし、それでもフェーズオーダーを試してみたい場合は、読み続けてください。/ end-edit
実際、phaseListenersは、すべてのフェーズをリッスンするように実装した場合、action-attributeで指定されたメソッドの前後の両方で呼び出される可能性があります。
public class MyPhaseListener implements PhaseListener {
public PhaseId getPhaseId() { return PhaseId.ANY_PHASE; }
public void beforePhase(PhaseEvent event) {
System.out.println("Before Phase: " + event.getPhaseId());
}
public void afterPhase(PhaseEvent event) {
System.out.println("After Phase: " + event.getPhaseId());
}
}
faces-config.xmlでリスナーをアクティブ化します
<faces-config ... >
<lifecycle>
<phase-listener>MyPhaseListener</phase-listener>
</lifecycle>
</faces-config>
これは、すべてのリスナー呼び出しと、actionListenerとアクションが呼び出されたときのプリントアウトです。
INFO: Before Phase: RESTORE_VIEW 1
INFO: After Phase: RESTORE_VIEW 1
INFO: Before Phase: APPLY_REQUEST_VALUES 2
INFO: After Phase: APPLY_REQUEST_VALUES 2
INFO: Before Phase: PROCESS_VALIDATIONS 3
INFO: After Phase: PROCESS_VALIDATIONS 3
INFO: Before Phase: UPDATE_MODEL_VALUES 4
INFO: After Phase: UPDATE_MODEL_VALUES 4
INFO: Before Phase: INVOKE_APPLICATION 5
INFO: ActionListener Done
INFO: Action Done
INFO: After Phase: INVOKE_APPLICATION 5
INFO: Before Phase: RENDER_RESPONSE 6
INFO: After Phase: RENDER_RESPONSE 6