Как реализовать PhaseListener, который запускается в конце жизненного цикла? - PullRequest
24 голосов
/ 05 декабря 2011

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

Ответы [ 2 ]

39 голосов
/ 05 декабря 2011

Вам необходимо реализовать интерфейс 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.
}
5 голосов
/ 19 июня 2014

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

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