3
respostas

Campo boolean

Opa não to conseguindo enteder o meu sistema com o campo boolean! Tenho uma classe usuario e nela um atributo boolean.

private boolean acessoTotal = false;

Sei que por padrão ele ja vem false, e depois no minha html tenho o.

<p:outputLabel value="Acesso Total ao sistema?" for="acesso" />
                    <p:selectBooleanCheckbox id="acesso"
                        value="#{usuarioBean.usuario.acessoTotal}" />

Eu acho que eu já entendi o porque. Estou usando o meu.

@SuppressWarnings("unused")
    public boolean verificar(Usuario usuario) {
        Query query = manager
                .createQuery("Select u from Usuario u WHERE u.login = :pLogin and u.senha = :pSenha");
        query.setParameter("pLogin", usuario.getLogin());
        query.setParameter("pSenha", usuario.getSenha());
        try {
            Usuario resultado = (Usuario) query.getSingleResult();
        } catch (NoResultException e) {
            return false;
        }
        return true;
    }

aqui estou fazendo a virificação e por isso que o meu boolean está vindo falso porque só estou passando 2 campos para o setParameter, é isso? Porque aqui no meu metodo.

@Transacional
    public String acesso() {
        FacesContext context = FacesContext.getCurrentInstance();
        boolean verificar = usuarioDao.verificar(usuario);
        if (verificar) {
            context.getExternalContext().getSessionMap()
                    .put("usuarioLogado", this.usuario);
            pegarUsuario(usuario);
            return RedirecionadorDePaginas.direcao("principal.xhtml");
        } else {
            this.usuario = new Usuario();
            Mensagem.mensagemError("Usuario ou senha incorreto");
            return "";
        }
    }

Quando chamo o metodo pegar o usuario dentro do metodo eu só recebo o nome e a senha que setei no meu parameter do dao, eu queria o meu campo boolean também mais sem fazer o.

            .createQuery("Select u from Usuario u WHERE u.login = :pLogin and u.senha = :pSenha and u.acessoTotal = :pAcessoTotal");
        query.setParameter("pLogin", usuario.getLogin());
        query.setParameter("pSenha", usuario.getSenha());
        query.setParameter("pAcessoTotal", usuario.isAcessoTotal());

Sem passar ele na consulta da query, tem como eu pegar o acessoTotal?

3 respostas

Rapaz, você pode simplificar essa lógica.

 boolean verificar = usuarioDao.verificar(usuario);
        if (verificar) {
        .  . .

    }

Você não precisa disso:

  boolean verificar = usuarioDao.verificar(usuario);

nem disso:

@SuppressWarnings("unused")
    public boolean verificar(Usuario usuario) {
        Query query = manager
                .createQuery("Select u from Usuario u WHERE u.login = :pLogin and u.senha = :pSenha");
        query.setParameter("pLogin", usuario.getLogin());
        query.setParameter("pSenha", usuario.getSenha());
        try {
            Usuario resultado = (Usuario) query.getSingleResult();
        } catch (NoResultException e) {
            return false;
        }
        return true;
    }

Repare que o o Usuário tem o atributo:

private boolean acessoTotal;

Assim , se você tem que perguntar para alguém sobre o acesso, você pergunta para o próprio usuário que já saberá responder. Basta você chamar getAcessoTotal()

 if (usuario.getAcessoTotal()) {
            context.getExternalContext().getSessionMap()

Sergio não entendi muito a sua lógico. Eu uso

@SuppressWarnings("unused")
    public boolean verificar(Usuario usuario) {
        Query query = manager
                .createQuery("Select u from Usuario u WHERE u.login = :pLogin and u.senha = :pSenha");
        query.setParameter("pLogin", usuario.getLogin());
        query.setParameter("pSenha", usuario.getSenha());
        try {
            Usuario resultado = (Usuario) query.getSingleResult();
        } catch (NoResultException e) {
            return false;
        }
        return true;
    }

na hora do login quando o usuario vai fazer o login se os campos digitados vai bater com algum campo do meu banco de dados, eu necessito desssa lógica, e depois o outro metodo também preciso para verificar... Oque eu quero é todos os campos do usuario na query e não só o nome e a senha.

Se o teu Usuário tem um atributo acessoTotal, eu imagino que ao cadastrar o usuário você já preenche esse campo com true caso ele tenha o acesso.

Então quando você usa o método pegarUsuário que traz um usuário você chama o método usuario,getAcessoTotal(). Vai trazer a resposta que você quer.

Você não precisa ir ao Banco de novo usando o método vericarAcesso(Usuario).

O objeto usuário sabe se ele tem ou não acesso.

Se ajudou não deixe de finalizar o tópico.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software