Вам необходимо реализовать интерфейс 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>
Обновление вышеуказанный фазовый слушатель действительно применяется во всем приложении. Чтобы иметь прослушиватель фазы для определенного вида, используйте атрибуты beforePhase
и / или afterPhase
<f:view>
.
1027 * Е.Г. *
<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 заключается в использовании <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.
}