Como identificar se uma Pagina JSF esta sendo carregada pela primeira vez ou se esta sendo exibida apos alguma transmissão?
Como identificar se uma Pagina JSF esta sendo carregada pela primeira vez ou se esta sendo exibida apos alguma transmissão?
Isto é como saber se uma requisição feita a fase RESTORE VIEW é uma requisição inicial e não de uma pagina já existente que foi transmitida ?
Olá,
Abaixo um pequeno código que mostra o nome da view e a quantidade de vezes que foi chamada:
package org.jsfcontapaginas;
import java.util.HashMap;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
public class LifeCycleListener implements PhaseListener {
private static final long serialVersionUID = 1L;
private HashMap<String,Long> contaPagina = new HashMap<String,Long>();
@Override
public void afterPhase(PhaseEvent phaseEvent) {
if(phaseEvent.getPhaseId() == getPhaseId()) {
String viewId = phaseEvent.getFacesContext().getViewRoot().getViewId();
if(contaPagina.containsKey(viewId)) {
contaPagina.put(viewId, contaPagina.get(viewId)+1);
}
else {
contaPagina.put(viewId, 1L);
}
for(String key:contaPagina.keySet()) {
System.out.println(key + " : " + contaPagina.get(key));
}
}
}
@Override
public void beforePhase(PhaseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public PhaseId getPhaseId() {
return PhaseId.RESTORE_VIEW;
}
}
Obrigada pela resposta. Como acessar contaPagina do Bean?
Olá,
A partir do JSF 2.2, o PhaseLinear é um target CDI, assim você pode injetar um bean dentro dele. Esse bean pode ter a lógica que citei acima. Por último, basta injetar esse bean em qualquer outro bean que você queira.
Referência: http://stackoverflow.com/questions/19930241/how-to-inject-in-a-phaselistener