venerdì 29 marzo 2013

JSF definire e utilizzare PhaseListener

L'interfaccia javax.faces.event.PhaseListener se implementata consente di scrivere codice in ogni punto del ciclo di vita della pagina JSF.
I cicli di vita della pagina sono:
  • RESTORE VIEW
  • APPLY REQUEST VALUES
  • PROCESS VALIDATION
  • UPDATE MODEL VALUE
  • INVOKE APPLICATION
  • RENDER RESPONSE
Si può definire o a livello globale, dichiarandola nel faces-config.xml, oppure sulla singola view in cui è dichiarata (solo dalla versione 1.2 in poi).

Nel primo caso, una volta scritta la classe, è sufficiente dichiarare nel faces-config.xml


<lifecycle>
 <phase-listener>it.events.lifecycleJsf.RegistroEventiPagina</phase-listener>
 </lifecycle>

Nel secondo caso invece dobbiamo:
  1. Definire la classe come proprietà del Managed Bean;
  2. Inserire nella pagina di interesse il tag
    <f:phaseListener binding="#{workflowTabManager.eventListener}" type="it.events.lifecycleJsf.RegistroEventiPagina"/>

La classe RegistroEventiPagina è la seguente:

public class RegistroEventiPagina implements PhaseListener {
 private static final long serialVersionUID = 1L;
 private static Logger log=Logger.getLogger(Costanti.LOG_APPENDER);
 @Override
 public void afterPhase(PhaseEvent pe) {
  if(pe.getPhaseId()==PhaseId.RESTORE_VIEW){
   log.debug("Esco dalla fase di RESTORE_VIEW: "+new Date()+" phaseId-"+pe.getPhaseId().toString());
  }
  else if(pe.getPhaseId()==PhaseId.APPLY_REQUEST_VALUES)
  {
   log.debug("Esco dalla fase di APPLY_REQUEST_VALUES: "+new Date()+" phaseId-"+pe.getPhaseId().toString());
  }
  else if(pe.getPhaseId()==PhaseId.PROCESS_VALIDATIONS)
  {
   log.debug("Esco dalla fase di PROCESS_VALIDATIONS: "+new Date()+" phaseId-"+pe.getPhaseId().toString());
  }
  else if(pe.getPhaseId()==PhaseId.UPDATE_MODEL_VALUES)
  {
   log.debug("Esco dalla fase di UPDATE_MODEL_VALUES: "+new Date()+" phaseId-"+pe.getPhaseId().toString());
  }
  else if(pe.getPhaseId()==PhaseId.INVOKE_APPLICATION)
  {
   log.debug("Esco dalla fase di INVOKE_APPLICATION: "+new Date()+" phaseId-"+pe.getPhaseId().toString());
  }
  else if(pe.getPhaseId()==PhaseId.RENDER_RESPONSE)
  {
   log.debug("Esco dalla fase di RENDER_RESPONSE: "+new Date()+" phaseId-"+pe.getPhaseId().toString());
  }
  
 }
 @Override
 public void beforePhase(PhaseEvent pe) {
  
  if(pe.getPhaseId()==PhaseId.RESTORE_VIEW){
   log.debug("Entro nella fase di RESTORE_VIEW: "+new Date()+" phaseId-"+pe.getPhaseId().toString());
  }
  else if(pe.getPhaseId()==PhaseId.APPLY_REQUEST_VALUES)
  {
   log.debug("Entro nella fase di APPLY_REQUEST_VALUES: "+new Date()+" phaseId-"+pe.getPhaseId().toString());
  }
  else if(pe.getPhaseId()==PhaseId.PROCESS_VALIDATIONS)
  {
   log.debug("Entro nella fase di PROCESS_VALIDATIONS: "+new Date()+" phaseId-"+pe.getPhaseId().toString());
  }
  else if(pe.getPhaseId()==PhaseId.UPDATE_MODEL_VALUES)
  {
   log.debug("Entro nella fase di UPDATE_MODEL_VALUES: "+new Date()+" phaseId-"+pe.getPhaseId().toString());
  }
  else if(pe.getPhaseId()==PhaseId.INVOKE_APPLICATION)
  {
   log.debug("Entro nella fase di INVOKE_APPLICATION: "+new Date()+" phaseId-"+pe.getPhaseId().toString());
  }
  else if(pe.getPhaseId()==PhaseId.RENDER_RESPONSE)
  {
   log.debug("Entro nella fase di RENDER_RESPONSE: "+new Date()+" phaseId-"+pe.getPhaseId().toString());
  }
  
 }

 @Override
 public PhaseId getPhaseId() {
  
   return PhaseId.ANY_PHASE;
 }

}

Nessun commento:

Posta un commento