Problema com Mojarra 2.0.4 e PhaseListener
03/fevereiro/2011 - Java
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.
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(); } } }
Até mais,
Roberto