Problema ao redirecionar página

0 respostas
Y

Olá, estou tendo problemas com o redirecionamento de páginas utilizando o @SessionScoped.

Primeiro vamos começar com o index.xhtml, que faz basicamente a verificação da sessão, ou seja, caso a sessão seja diferente de false, ele me redireciona para a página principal.xhtml, senão ele volta para login.xhtml.

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <f:metadata>
            <f:event listener="#{mbLogin.verificarAutorizacao}" type="preRenderView"/>
        </f:metadata>        
    </h:head>
    
    <h:body>
        
    </h:body>
</html>

Depois, temos a página login.xhtml que apenas pega os dados, e os joga no managedbean, que está referenciado como mbLogin.

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>.::Login - OnMemo::.</title>
    </h:head>
    
    <h:body>
        <h:form>
            <h:panelGrid id="painel">
                <h:outputLabel value="Usuário: "/>
                <h:inputText value="#{mbLogin.usuario}" required="true"/>
                
                <h:outputLabel value="Senha: "/>
                <h:inputSecret value="#{mbLogin.senha}" required="true"/>
                
                <h:commandButton value="Acessar" action="#{mbLogin.logar}"/>
            </h:panelGrid>
        </h:form>
    </h:body>
</html>

Para conferência, segue abaixo o managedbean:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.onmemo.managed;


import br.com.onmemo.dao.UsuarioDAO;
import java.io.IOException;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ComponentSystemEvent;
import javax.servlet.http.HttpSession;


/**
 *
 * @author Yehia Azanki
 */
@ManagedBean(name = "mbLogin")
@SessionScoped
public class MBLogin {

    private String usuario;
    private String senha;
    private boolean loginOK = false;
    
    public MBLogin() {
    }

    public String getUsuario() {
        return usuario;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public boolean isLoginOK() {
        return loginOK;
    }

    public void setLoginOK(boolean loginOK) {
        this.loginOK = loginOK;
    }
    
    public String logar() {
        String target = "index";
        try{
            if(UsuarioDAO.valida(usuario, senha)){
                loginOK = true;
                target = "principal";
                FacesContext.getCurrentInstance().addMessage("", new FacesMessage("Bem-Vindo",usuario));
            }else{
                loginOK = false;
                target = "login";
                FacesContext.getCurrentInstance().addMessage("", new FacesMessage("Usuário ou senha inválidos!"));
            }
        }catch(Exception e){
            FacesContext.getCurrentInstance().addMessage("errorMsg", new FacesMessage("Erro ao acessar o banco de dados!"));
            target = "erro";
        }
        
        return target;
    }
    
    public String deslogar() {
        FacesContext fc = FacesContext.getCurrentInstance();
        HttpSession session = (HttpSession) fc.getExternalContext().getSession(false);
        session.invalidate();
        return "login";
    }
    
    public void verificarAutorizacao(ComponentSystemEvent e) throws IOException {
        if(loginOK == true) {            
            FacesContext.getCurrentInstance().getExternalContext().redirect("pages/principal.xhtml");
        }else{
            FacesContext.getCurrentInstance().getExternalContext().redirect("pages/login.xhtml");
        }
    }
    
}

A página principal.xhtml é apenas uma página simples, sem nada ainda implementado.

Depois de toda a apresentação do conteúdo, vamos ao erro, que se dá quando efetuo o login no sistema:

http://localhost:8084/OnMemo/pages/pages/pages/pages/pages/pages/pages/pages/pages/pages/pages/pages/pages/pages/pages/pages/pages/pages/pages/pages/pages/principal.xhtml

Podemos perceber que ele faz um monte de redirecionamentos utilizando o contexto pages.

Alguém tem uma explicação para isto?

Grato.

Criado 12 de junho de 2013
Respostas 0
Participantes 1