PhaseListner

2 respostas
D

Boa tarde.

Estou usando phaselistner para o login do meu sistema.
O codigo esta funcionando, porem gostaria que meu phaselistner fosse chamado somente depois do meu bean, nao precisando assim dar dublo clique em "logar".
Vou colocar o codigo para esclarecer

Bean

public void verificarbean() {
        ld = new LoginDao();
        log = ld.verificar(l);
        FacesContext contexto = FacesContext.getCurrentInstance();
        sessao = (HttpSession) contexto.getExternalContext().getSession(true);
        sessao.setAttribute("log", log);
        Login laux = new Login();
        laux = (Login) sessao.getAttribute("log");

phaselistner

public void afterPhase(PhaseEvent event) {

        try {
        FacesContext contexto = event.getFacesContext();
        String paginaAtual = contexto.getViewRoot().getViewId();
        boolean isLoginPage = paginaAtual.lastIndexOf("Login.xhtml") > -1;
        HttpSession sessao = (HttpSession) contexto.getExternalContext().getSession(false);
        Login login = new Login();
        login = (Login) sessao.getAttribute("log");

        if (isLoginPage && login.getTipo().equals("administrador")) {
            NavigationHandler nh = contexto.getApplication().getNavigationHandler();
            nh.handleNavigation(contexto, null, "admin");
        }
         else if (isLoginPage && login.getTipo().equals("comum")) {
        NavigationHandler nh = contexto.getApplication().getNavigationHandler();
        nh.handleNavigation(contexto, null, "padrao");
        }
        else if (!isLoginPage && !login.getTipo().equals("commum") || !login.getTipo().equals("administrador")) {
        NavigationHandler nh = contexto.getApplication().getNavigationHandler();
        nh.handleNavigation(contexto, null, "login");
        }
        } catch ( Exception e) {
            
        }
        
    }

O que está acontecendo é que ele passa pelo meu phaselistner antes de rodar o meu Bean, e gostaria que fosse ao contrario.
Nao sei se isso é possivel
Muito Obrigado

2 Respostas

Grinvon

Tente esse exemplo daqui!

D

Consegui resolver, obrigado.

Eu não sabia que o metodo getPhaseId() determinava a hora de execução do phaselistner.
Tudo o que eu fiz foi colocar .INVOKE_APPLICATION

public PhaseId getPhaseId() {
        return PhaseId.INVOKE_APPLICATION;
       
    }
Criado 18 de maio de 2012
Ultima resposta 19 de mai. de 2012
Respostas 2
Participantes 2