JSFライフサイクルの最後に実行されるPhaseListener
を実装するにはどうすればよいですか?
PhaseListener
インターフェースを実装し、 beforePhase()
の PhaseId_RENDER_RESPONSE
。レンダリング応答は、JSFライフサイクルの最後のフェーズです。
public class MyPhaseListener implements PhaseListener {
@Override
public PhaseId getPhaseId() {
return PhaseId.RENDER_RESPONSE;
}
@Override
public void beforePhase(PhaseEvent event) {
// Do your job here which should run right before the RENDER_RESPONSE.
}
@Override
public void afterPhase(PhaseEvent event) {
// Do your job here which should run right after the RENDER_RESPONSE.
}
}
実行するには、faces-config.xml
で次のように登録します。
<lifecycle>
<phase-listener>com.example.MyPhaseListener</phase-listener>
</lifecycle>
Update上記のフェーズリスナーは実際にアプリケーション全体に適用されます。特定のビューのフェーズリスナーを使用するには、 <f:view>
のbeforePhase
および/またはafterPhase
属性を使用します。
例えば。
<f:view beforePhase="#{bean.beforePhase}">
...
</f:view>
と
public void beforePhase(PhaseEvent event) {
if (event.getPhaseId() == PhaseId.RENDER_RESPONSE) {
// Do here your job which should run right before the RENDER_RESPONSE.
}
}
JSF 2.0のもう1つの方法は、 <f:event type="preRenderView">
を使用する方法です。
<f:event type="preRenderView" listener="#{bean.preRenderView}" />
と
public void preRenderView() {
// Do here your job which should run right before the RENDER_RESPONSE.
}
jsf 2
を使用できます<f:phaseListener type="my.MyPhaseListener">
は、いくつかのMyPhaseListener
のfacelet
をフックします。 MyPhaseListener
はPhaseListener
を実装してオーバーライドする必要があります
afterPhase
-フェーズ終了後に実行されるコード付きbeforePhase
-フェーズ開始前に実行されるコードgetPhaseId
-PhaseId
enumは、リスナーが呼び出されるフェーズの名前を指定します(PhaseId.RENDER_RESPONSE
ライフサイクルの最終段階として)