sintaxis - sesiones en jsf
¿Cómo implementar un PhaseListener que se ejecuta al final del ciclo de vida? (2)
¿Cómo puedo implementar un PhaseListener
que se ejecuta al final del ciclo de vida JSF?
En jsf 2
puede usar <f:phaseListener type="my.MyPhaseListener">
para conectar MyPhaseListener
a algún facelet
. MyPhaseListener
debe implementar PhaseListener
y anular
-
afterPhase
- con código que se ejecutará después del final de la fase -
beforePhase
- con código que se ejecutará antes de que la fase comience -
getPhaseId
-PhaseId
enumeración que especifica el nombre de la fase para la cual se invoca el oyente (PhaseId.RENDER_RESPONSE
como última fase del ciclo de vida)
PhaseListener
implementar la interfaz PhaseListener
y enganchar beforePhase()
de PhaseId_RENDER_RESPONSE
. La respuesta de representación es la última fase del ciclo de vida 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 que se ejecute, regístrelo de la siguiente manera en faces-config.xml
:
<lifecycle>
<phase-listener>com.example.MyPhaseListener</phase-listener>
</lifecycle>
Actualice el oyente de la fase anterior es de hecho aplicativo. Para tener un detector de fase para una vista específica, use los beforePhase
y / o afterPhase
de <f:view>
.
P.ej
<f:view beforePhase="#{bean.beforePhase}">
...
</f:view>
con
public void beforePhase(PhaseEvent event) {
if (event.getPhaseId() == PhaseId.RENDER_RESPONSE) {
// Do here your job which should run right before the RENDER_RESPONSE.
}
}
Un camino más JSF 2.0 está por cierto usando el <f:event type="preRenderView">
:
<f:event type="preRenderView" listener="#{bean.preRenderView}" />
con
public void preRenderView() {
// Do here your job which should run right before the RENDER_RESPONSE.
}