Ajuda com Session em JSF

5 respostas
jsf
S

Eu estou projetando o login do meu sistema, todavia, quando executo o DAO e faço um if pra ver se a id é maior que zero, ele sempre entra no else, mesmo os dados estando certos, alguém pode me dar uma mão ?

DAO

public List<Pessoa> BuscarLogin(String cpf, String senha) {
        Connection con = Conexao.getConnection();
        PreparedStatement stmt = null;
        ResultSet rs = null;
        List<Pessoa> pessoa = new ArrayList<>();
        try {
            stmt = con.prepareStatement("SELECT id,nome,nivel FROM pessoa where cpf = ? and senha = ?");
            stmt.setString(1, cpf);
            stmt.setString(2, senha);
            rs = stmt.executeQuery();
            while (rs.next()) {
                Pessoa p = new Pessoa();
                p.setId(rs.getInt("id"));
                p.setNome(rs.getString("nome"));
                p.setNivel(rs.getInt("nivel"));
                pessoa.add(p);
                System.out.println("Id"+p.getId());
                System.out.println("Nome"+p.getNome());
                System.out.println("Nivel"+p.getNivel());
            }
        
    } catch (SQLException ex) {
        Logger.getLogger(PessoaDAO.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
        Conexao.closeConnection(con, stmt, rs);
    }
    return pessoa;
}

**Os println é pra ver se tava recebendo os dados, e sim, está recebendo

Bean

public String doLogin() {
		SimpleHash hash = new SimpleHash("md5",pessoa.getSenha());
		pDAO.BuscarLogin(pessoa.getCpf(), hash.toHex());
		if(pessoa.getId()>0) {
			HttpSession hs = Sessao.getSession();
			hs.setAttribute("usuario", pessoa.getNome());
			return "/pages/principais/principalDiscente.xhtml?faces-redirect=true";
		}
		else {
			FacesMessage fm = new FacesMessage("Login error","ERRO MSG");
			fm.setSeverity(FacesMessage.SEVERITY_ERROR);
			FacesContext.getCurrentInstance().addMessage(null, fm);
			return "/pages/principais/erroLogin.xhtml?faces-redirect=true";
		}
	}

Tela

<h:form>
                    <div align="center"><h1>SGE</h1></div>
                    <p class="login-box-msg">Entre com seus dados para acessar o sistema</p>
                    <p:messages closable="true"/>
                    <div class="form-group has-feedback">
                        <p:inputMask value="#{PessoaMB.pessoa.cpf}" styleClass="form-control" placeholder="Digite seu CPF" required="true" requiredMessage="Favor preencher o campo cpf." mask="[CPF removido]"/>
                    </div>
                    <div class="form-group has-feedback">
                        <p:inputText value="#{PessoaMB.pessoa.senha}" type="password" styleClass="form-control" placeholder="Digite sua senha" required="true" requiredMessage="Favor preencher o campo senha"/>
                    </div>
                    <div class="row">
                        <p:spacer height="10"/>
                        <div class="col-xs-12">
                            <p:commandButton styleClass="btn btn-success btn-block" action="#{PessoaMB.doLogin()}" value="Entrar" ajax="false"/>
                        </div>
                    </div>
                </h:form>

5 Respostas

andrebmarinho

Posta o codigo do bean completo.

S

Boa tarde, segue o bean completo, só te informando, eu fiz mais dois testes, criei duas Strings, e usei .equals( ) pra ver se ele fazia, ele fez certinho, mas quando eu faço esse if que está no código acima, ele sempre entra no else, mesmo eu já tendo averiguado que o dao que preenche o objeto funciona:

Bean completo:
package br.com.ufpr.es.bean;

import br.com.ufpr.es.dao.AlunoDAO;
import br.com.ufpr.es.dao.CidadeDAO;
import br.com.ufpr.es.dao.OrientadorDAO;
import br.com.ufpr.es.dao.PessoaDAO;
import br.com.ufpr.es.dao.OrientadorDAO;
import br.com.ufpr.es.modelo.Aluno;
import br.com.ufpr.es.modelo.Cidade;
import br.com.ufpr.es.modelo.Orientador;
import br.com.ufpr.es.modelo.Pessoa;
import br.com.ufpr.es.util.Sessao;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import org.apache.shiro.crypto.hash.SimpleHash;

/**
 *
 * @author Elisson O. Gaievski
 * 
 */

@ManagedBean(name = "PessoaMB")
@SessionScoped
public class pessoaMB {

	
	private Pessoa pessoa;
	private PessoaDAO pDAO = new PessoaDAO();

	// CONSTRUTORES E MÉTODOS
	public pessoaMB() {
		pessoa = new Pessoa();
	}
	
	public String doLogin() {
		SimpleHash hash = new SimpleHash("md5",pessoa.getSenha());
		pDAO.BuscarLogin(pessoa.getCpf(), hash.toHex());
		if(pessoa.getId()>0) {
			HttpSession hs = Sessao.getSession();
			hs.setAttribute("usuario", pessoa.getNome());
			return "/pages/principais/principalDiscente.xhtml?faces-redirect=true";
		}
		else {
			FacesMessage fm = new FacesMessage("Login error","ERRO MSG");
			fm.setSeverity(FacesMessage.SEVERITY_ERROR);
			FacesContext.getCurrentInstance().addMessage(null, fm);
			return "/pages/principais/erroLogin.xhtml?faces-redirect=true";
		}
	}
	
	public String doLogout() {
		HttpSession hs = Sessao.getSession();
		hs.invalidate();
		return "/index.xhtml?faces-redirect=true";
	}
	
	public Pessoa getPessoa() {
		return pessoa;
	}

	public void setPessoa(Pessoa pessoa) {
		this.pessoa = pessoa;
	}

	public PessoaDAO getpDAO() {
		return pDAO;
	}

	public void setpDAO(PessoaDAO pDAO) {
		this.pDAO = pDAO;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	
	

}
andrebmarinho

Olha o ideal é rodar o programa em modo debug e colocar um breakpoint nessas duas linhas:

pDAO.BuscarLogin(pessoa.getCpf(), hash.toHex());
		if(pessoa.getId()>0) {

E verificar o que esta sendo retornado do banco, pois o problema pode esta na camada de DAO. A IDE que você utiliza é o eclipse?

Se for:

S

Eu debuguei e entendi o que acontece, o meu objeto pessoa não pega os dados que eu seto no DAO (id,nome,nivel), ele por alguma razão pega o que inseri no formulário, logo não existe uma ID, logo a condição do if é false e ele vai pro else. Todavia, os prints que eu dou no meu DAO ele vem certo

Debug:

S

Aqui o meu problema:

Só não consigo entender porque o objeto vem vazio no bean

Criado 5 de julho de 2019
Ultima resposta 5 de jul. de 2019
Respostas 5
Participantes 2