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

Oque está acontencendo com o meu projeto?

Opa, beleza? pois então fiz um curso aqui na alura de jsf e logo depois me deparei com o maven e cdi e tudo mais e gostei muito, e agora não acostumo começar um projeto sem eles, só que agora com o meu cdi acho que pode estar dando algum problema, porque eu queria fazer uma tela de login, no entando eu ja tenho essa tela feita.

<?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://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:p="http://primefaces.org/ui"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets">

<ui:composition template="/template/template.xhtml">
    <ui:define name="conteudo">
        <h:form id="formularioUsuario">
            <p:growl life="6000" />
            <p:fieldset legend="Usuario">
                <p:outputLabel value="Insira o login e a sua senha" />
                <h:panelGrid columns="2">
                    <p:outputLabel value="Loguin: " for="loguin" />
                    <p:inputText id="loguin" value="#{usuarioBean.usuario.login}" />

                    <p:outputLabel value="Senha: " for="senha" />
                    <p:password id="senha" value="#{usuarioBean.usuario.senha}" />
                    <br />
                    <p:commandButton value="Loguin"
                        action="#{usuarioBean.verificarLoginn}" update="formularioUsuario" />
                </h:panelGrid>
            </p:fieldset>
        </h:form>
    </ui:define>
</ui:composition>

</html>

Minha página, no meu componente botão eu até errei o nome de proposito do meu metodo, colocando um n a mais no meu login, porque sempre que eu clicava nele ele não me retorna nada ai testei trocando o nome do metodo errando de proposito e nem o erro da pagina aconteceu dizendo que está errado.

Classe bean

@SuppressWarnings("serial")
@Named
@SessionScoped
public class UsuarioBean implements Serializable{

    @Inject
    private Usuario usuario;
    @Inject
    private UsuarioDao usuarioDao;


    @Transacional
    public String verificarLogin() {
        FacesContext context = FacesContext.getCurrentInstance();
        boolean verificar = usuarioDao.verificar(usuario);
        if(verificar) {
            context.getExternalContext().getSessionMap().put("usuarioLogado", this.usuario);
            System.out.println("Com sucesso!" + usuario.getLogin());
            this.usuario.setAcesso(true);
            return RedirecionadorDePaginas.redirecionador("principal.xhtml");
        } else {
            MensagemUtil.mensagemError("Usuario ou senha incorretos");
            this.usuario = new Usuario();
            return null;
        }
    }

    public Usuario getUsuario() {
        return usuario;
    }
    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }
}
@SuppressWarnings("serial")
public class UsuarioDao implements Serializable{

    @Inject
    private EntityManager manager;

    public void adicionar(Usuario usuario) {
        manager.persist(usuario);
    }

    @SuppressWarnings("unused")
    public boolean verificar(Usuario usuario) {
    TypedQuery<Usuario> query = manager.createNamedQuery("Select u from Usuario u  where u.login = :pLogin and u.senha =:pSenha", Usuario.class);
        query.setParameter("pLogin", usuario.getLogin());
        query.setParameter("pSenha", usuario.getSenha());
        try {
            Usuario singleResult = query.getSingleResult();
        } catch(NoResultException e) {
            return false;
        }
        return true;
    }
}

e no meu faces-config.xml

 <lifecycle>
        <phase-listener>
            br.com.bercalini.testeUtil.Autorizador
        </phase-listener>
    </lifecycle>

Mais no projeto que inicei aqui e terminei na alura é a mesma tela de login a mesmo logica de programação e nela da tudo certo, agora usando cdi não da, alias quando coloco no meu faces-config.xml o codigo acima o meu projeto pode apertar qualquer botão nas paginas que não acontece nada, mais se tirar novamante a linha do código que é essa.

 <lifecycle>
        <phase-listener>
            br.com.bercalini.testeUtil.Autorizador
        </phase-listener>
    </lifecycle>

Volta tudo a funcionar novamente, oque está acontecendo?

5 respostas

Fala aí Alisson, blz ?

Cara muito esquisito um PhaseListener invalidar as configurações do CDI. kkk

Como está estruturado seu projeto ? Vc já está usando o alura-lib ? Ou por enquanto só está convertendo seu projeto para usar o CDI?

Qual servidor (servlet container ou application server) você está usando ?

Fernando sussa? posso postar o github para você ver a estruta e as libs todas certas? e estou usando o toncat8

solução!

Fernando para você ver, para você ver, antes da sua resposta eu tava achando que era algum conflito com CDI, ai depois li sua resposta e pensei, se ele ta falando que é estranho então sou eu que estou errado, kkkkk. Fiz os código denovo e rodei e fui ver novamente os código, e sabe oque tava errando? eu tinha esquecido que criei um pasta chamado paginas para colocar meu xhtml dentro dela, o meu erro era no if.

if("/paginas/usuario.xhtml".equals(pagina)) {

antes tava assim.

if("/usuario.xhtml".equals(pagina)) {

e eu sempre to colacando o sysou para uma forma de debug e nessa parte não coloquei kkkkkk. obrigado, me ajudo muito mesmo assim! Porque se não tava ainda achando que era algum tipo de conflito. abcs

Opa que bom que conseguiu, kkk

Cara isso é mais comum do que você imagina, já fiquei por horas em um problema (achando que tudo que eu havia aprendido estava errado kkk). Quando fui ver era um arquivo no lugar errado ou um diretório faltando...

Acontece..kk

Abs.

kkkkkkk valeu mano, é bom ter vocês para nos ajudar aqui.