Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Após migrar tudo para mySQL, o index.xhtml não está mais setando os atributos de loginBean.usuario

Bom dia a todos,

Primeiramente, estou usando JDK EE 1.8.0_112 + WildFly Full 10.1.0.Final (WildFly Core 2.2.0.Final). A ideia de usar Weblogic afundou pois só tenho essa versão de JDK que não é compatível com qualquer versão do Weblogic até a 12c...

Inseri um seguinte no ínicio de LoginBeam.efetuaLogin():

        System.out.println("[INFO] User/Pwd : "+usuario.getLogin()+"/"+usuario.getSenha());
//        usuario.setLogin("admin");
//        usuario.setSenha("pass");

E recebi o seguinte no log ao executar uma tentativa de login:

00:54:45,683 INFO  [stdout] (default task-4) [INFO] User/Pwd : null/null

Se descomentar as duas linhas seguintes ao syso, o sistema loga como admin, não importando o que seja passado no form inicial.

Alguma ideia do que pode estar errado dado que o index.xhtml está idêntico ao original do zip?

TIA,

WB::

4 respostas

Fala aí Wilson, blz?

Manda seu index.xhtml e seu LoginBean para eu tentar te ajudar.

Blz, Fernando!

O index.xhtml está inalterado em relação ao projeto original, mas segue:

<!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:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">

<ui:composition template="_template.xhtml">
    <ui:define name="corpo">
        <h:form id="f" style="width: 40%;  margin: 0 auto;">
            <p:panelGrid columns="2">

                <f:facet name="header">Login:</f:facet>

                <p:outputLabel value="Login: " />
                <p:inputText value="#{loginBean.usuario.login}" required="true"
                    id="login" />

                <p:outputLabel value="Senha: " />
                <h:inputSecret value="#{loginBean.usuario.senha}" required="true"
                    id="senha" />

                <f:facet name="footer">
                    <p:commandButton value="Logar" action="#{loginBean.efetuaLogin}"
                        update=":mensagens @form" />
                </f:facet>
            </p:panelGrid>
        </h:form>
    </ui:define>
</ui:composition>
</html>

E o LoginBean.java, as linhas 36 e 37 são uma gambiarra que fiz para poder continuar com o curso:

package br.com.caelum.livraria.login;

import javax.ejb.Startup;
import javax.faces.application.FacesMessage;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;

import br.com.caelum.livraria.bean.MenuBean;
import br.com.caelum.livraria.dao.UsuarioDao;
import br.com.caelum.livraria.modelo.Usuario;

@Named 
@RequestScoped 
public class LoginBean {

    private Usuario usuario=new Usuario();

    @Inject
    private UsuarioDao dao;

    @Inject
    UsuarioLogadoBean usuarioLogado;

    @Inject
    MenuBean menu;

    public Usuario getUsuario() {
        return usuario;
    }

    public String efetuaLogin() {

        System.out.println("[INFO] User/Pwd : "+usuario.getLogin()+"/"+usuario.getSenha());
        usuario.setLogin("admin");
        usuario.setSenha("pass");

        Usuario usuarioEncontrado = this.dao.buscaPeloLogin(usuario.getLogin());

        if(usuarioEncontrado!= null && possuiMesmaSenha(usuarioEncontrado)) {
            usuarioLogado.logar(usuarioEncontrado);
            return menu.paginaLivros();
        }

        criaMensagem("Usuário não encontrado!");
        limparForm();

        return "";
    }

    public String efetuaLogout() {
        this.usuarioLogado.deslogar();
        return this.menu.paginaLogin();
    }


    private void limparForm() {
        this.usuario = new Usuario();
    }

    private void criaMensagem(String mensagem) {
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, mensagem, ""));
    }

    private boolean possuiMesmaSenha(Usuario usuarioEncontrado) {
        return usuarioEncontrado.getSenha().equals(usuario.getSenha());
    }
}

TIA,

WB::

solução!

Faça um teste por favor.

Altere o import da anotação RequestScoped

De: javax.faces.bean.RequestScoped;

Para: javax.enterprise.context.RequestScoped;

E remova as duas linhas abaixo do seu método efetuaLogin

    usuario.setLogin("admin");
    usuario.setSenha("pass");

Fernando,

Funcionou! Obrigado pela força. Só falta entender o porquê de estar funcionando antes de alterar a base de dados para o mySQL...

Att,

WB::