Pular para o conteúdo

Problema com Mojarra 2.0.4 e PhaseListener

Olá,

Esse post é apenas um lembrete meu, mas pode ajudar outras pessoas 😉

No Mojarra 2.0.4 (acredito que este problema venha desde da 2.0.0) quando você implementa seu javax.faces.event.PhaseListener no método beforePhase() o método FacesContext.getViewRoot() retorna null. Isto impossibilita a uma verificação que eu precisava fazer no código abaixo.
Para contornar o problema joguei o código para o método afterPhase(), pois lá o getViewRoot() não vem nulo.
Não sei se isso ocorre com outras implementações do JSF 2 como o MyFaces e nem sei se é proposital ou é se um bug.

[sourcecode lang=java]
public void beforePhase(PhaseEvent evt) {
PhaseId phaseId = evt.getPhaseId();
FacesContext ctx = evt.getFacesContext();
String viewId = ctx.getViewRoot().getViewId();

if(PhaseId.RESTORE_VIEW.equals(phaseId)){
// Verificação simples de autorização de acesso
// Caso usuario não estiver na sessão, redireciona para o login
// Unica pagina livre é o que tem login na identificação da view
HttpSession session = (HttpSession) ctx.getExternalContext().getSession(true);
Object usuario = session.getAttribute(CrmGlobals.USUARIO_AUTENT);

try {

if(!(viewId.indexOf(“login”) > 0) && usuario == null){
FacesContext.getCurrentInstance().getExternalContext().redirect(“/crm/login/login.jsf”);
}

} catch (IOException e) {
e.printStackTrace();
}
}
}
[/sourcecode]

Até mais,
Roberto

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *