Подтвердить что ты не робот

Как реализовать PhaseListener, который работает в конце жизненного цикла?

Как я могу реализовать PhaseListener, который выполняется в конце жизненного цикла JSF?

4b9b3361

Ответ 1

Вам нужно реализовать интерфейс 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>.

например.

<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.
}

Ответ 2

В jsf 2 вы можете использовать <f:phaseListener type="my.MyPhaseListener"> для соединения MyPhaseListener для некоторого facelet. MyPhaseListener должен реализовывать PhaseListener и переопределять

  • afterPhase - с кодом, который будет запущен после завершения фазы
  • beforePhase - с кодом, который должен быть запущен до начала фазы
  • getPhaseId - PhaseId перечисление, указывающее название фазы, для которой вызывается вызывающий (PhaseId.RENDER_RESPONSE как последняя фаза жизненного цикла)