ti-enxame.com

Como implementar um PhaseListener que é executado no final do ciclo de vida?

Como posso implementar um PhaseListener que é executado no final do ciclo de vida do JSF?

25
Mahmoud Saleh

Você precisa implementar a interface PhaseListener e conectar-se a beforePhase() do PhaseId_RENDER_RESPONSE . A resposta de renderização é a última fase do ciclo de vida do 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.
    }

}

Para executá-lo, registre-o da seguinte maneira em faces-config.xml:

<lifecycle>
    <phase-listener>com.example.MyPhaseListener</phase-listener>
</lifecycle>

Atualize o ouvinte da fase acima é de fato aplicável a toda a aplicação. Para ter um ouvinte de fase para uma visualização específica, use os atributos beforePhase e/ou afterPhase dos atributos <f:view> .

Por exemplo.

<f:view beforePhase="#{bean.beforePhase}">
    ...
</f:view>

com

public void beforePhase(PhaseEvent event) {
    if (event.getPhaseId() == PhaseId.RENDER_RESPONSE) {
        // Do here your job which should run right before the RENDER_RESPONSE.
    }
}

Uma maneira mais JSF 2.0 é a propósito, usando o <f:event type="preRenderView"> :

<f:event type="preRenderView" listener="#{bean.preRenderView}" />

com

public void preRenderView() {
    // Do here your job which should run right before the RENDER_RESPONSE.
}
40
BalusC

Em jsf 2 você pode usar <f:phaseListener type="my.MyPhaseListener"> para ligar MyPhaseListener para alguns facelet. MyPhaseListener deve implementar PhaseListener e substituir

  • afterPhase - com código a ser executado após o final da fase
  • beforePhase - com o código a ser executado antes do início da fase
  • getPhaseId - PhaseId enum especificando o nome da fase para a qual o ouvinte deve ser chamado (PhaseId.RENDER_RESPONSE como última fase do ciclo de vida)
5
Oleksandr Tsurika