1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Login JSF usando CDI.

Boa noite pessoal. Mais uma vez venho solicitar a ajuda de vocês. Abaixo o meu fomulário Login.xhtml

https://www.filepicker.io/api/file/uJolhUDlStS383t4kAgb

Abaixo o código referente ao formulário acima.

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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:p="http://primefaces.org/ui">
<h:head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
    <h:outputStylesheet library="css" name="estilo.css" />
</h:head>
<h:body>
    <div id="login-dialog">
        <h:form id="frm">
            <p:messages autoUpdate="true" />
            <h:panelGrid columns="2" styleClass="grid-login">
                <p:outputLabel value="Usuário: " for="campo-usuario" />
                <p:inputText value="#{loginBean.nomeUsuario}" size="20" id="campo-usuario" />

                <p:outputLabel value="Senha: " for="campo-senha" />
                <p:password value="#{loginBean.senha}" size="20" id="campo-senha" />

                <p:outputLabel />
                <p:commandButton value="Acessar" action="#{loginBean.login}" />
            </h:panelGrid>
        </h:form>
    </div>
</h:body>
</html>

Abaixo o meu Model, onde será armazenado, os valores de entrada da tela de login.

package com.algaworks.financeiro.model;

import java.io.Serializable;
import java.util.Date;

import javax.faces.bean.SessionScoped;
import javax.inject.Named;

@Named
@SessionScoped
public class Usuario implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private String nome;
    private Date dataLogin;

    public boolean isLogado() {
        return nome != null;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public Date getDataLogin() {
        return dataLogin;
    }

    public void setDataLogin(Date dataLogin) {
        this.dataLogin = dataLogin;
    }

}

Abaixo, o que seria o meu ManagedBean, porém estou usando CDI, para injetar Usuario.

package com.algaworks.financeiro.negocio;

import java.util.Date;

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

import com.algaworks.financeiro.model.Usuario;

@Named
@RequestScoped
public class LoginBean {

    @Inject
    private Usuario usuario;

    private String nomeUsuario;
    private String senha;

    public String login(){
        FacesContext facesContext = FacesContext.getCurrentInstance();
        if("admin".equalsIgnoreCase(this.nomeUsuario) 
                && "123".equalsIgnoreCase(this.senha)){
            this.usuario.setNome(nomeUsuario);
            this.usuario.setDataLogin(new Date());
            return "/ConsultaLancamentos?faces-redirect=true";
        } else {
            FacesMessage message = new FacesMessage("Usuário/Senha inválidos");
            message.setSeverity(FacesMessage.SEVERITY_ERROR);
            facesContext.addMessage(null, message);
        }
        return null;
    }

    public String getNomeUsuario() {
        return nomeUsuario;
    }

    public void setNomeUsuario(String nomeUsuario) {
        this.nomeUsuario = nomeUsuario;
    }

    public String getSenha() {
        return senha;
    }

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

}

O beans.xml está da seguinte forma, e está dentro de WEB-INF

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE project>
<beans/>

Agora vem o problema que estou tendo, quando subo o servidor para tentar logar na tela, a mesma esta vindo com os valores null. Debuguei o código para ver os valores que estão vindo, e esta vindo nulo nos dois campos da tela de Login e não sei o porque, alguém poderia me ajudar.

Desde já muito obrigado.

OBRIGADO Cristian Urbainski, realmente era o IMPORT que estava errado, porém o ECLIPSE não me deu a opção para importar a biblioteca que você citou, mas me deu a opção de importar a seguinte biblioteca --> import javax.enterprise.context.RequestScoped;, após esse import a aplicação começou a funcionar, mas de qualquer forma muito obrigado pela ajuda, se não fosse por você não teria conseguido, muito obrigado, já coloquei como correto sua solução.

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags cdi ou faça a sua própria pergunta.