Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

CDI na LivroDataModel

Galera, no curso anterior eu fiz a parte opcional de criar lista usando LazyDataModel, ao chegar nesse curso ao modificar as classes para usar CDI a lista parou de funcionar e não estou conseguindo arrumar, segue o código: LivroDataModel

public class LivroDataModel extends LazyDataModel<Livro> implements Serializable{

    private static final long serialVersionUID = 1L;
    @Inject
    LivroDao livroDao;

    public LivroDataModel() {
        super.setRowCount(this.livroDao.quantidadeDeElementos());
    }

    @Override
    public List<Livro> load(int inicio, int quantidade, String campoOrdenacao, SortOrder sentidoOrdenacao,
            Map<String, Object> filtros) {
        String titulo = (String) filtros.get("titulo");



        if (filtros.get("titulo") != null) {
            return this.livroDao.listaTodosPaginada(inicio, quantidade, "titulo", titulo, campoOrdenacao, sentidoOrdenacao);
        } else if (filtros.get("isbn") != null) {
            String isbn = (String) filtros.get("isbn");
            return this.livroDao.listaTodosPaginada(inicio, quantidade, "isbn", isbn,  campoOrdenacao, sentidoOrdenacao);

        } else if (filtros.get("preco") != null) {
            String preco = (String) filtros.get("preco");
            return this.livroDao.listaTodosPaginada(inicio, quantidade, "preco", preco,campoOrdenacao, sentidoOrdenacao);  
        } else if (filtros.get("data") != null) {
            String data = (String) filtros.get("data");
            return this.livroDao.listaTodosPaginada(inicio, quantidade, "data", data,  campoOrdenacao, sentidoOrdenacao);
        }else if(filtros.get("genero") != null) {
            String genero = (String) filtros.get("genero");
            return this.livroDao.listaTodosPaginada(inicio, quantidade, "genero", genero,campoOrdenacao, sentidoOrdenacao);  
        } 
        return this.livroDao.listaTodosPaginada(inicio, quantidade, "titulo", titulo,  campoOrdenacao, sentidoOrdenacao);

    }

}

LivroDao

public class LivroDao implements Serializable{


    private static final long serialVersionUID = 1L;

    @Inject
    EntityManager em;

    private DAO<Livro> dao;

    @PostConstruct
    void init() {
        this.dao = new DAO<Livro>(em, Livro.class);
    }

    public int quantidadeDeElementos() {
        return dao.quantidadeDeElementos();
    }

    public void adiciona(Livro t) {
        dao.adiciona(t);
    }

    public void remove(Livro t) {
        dao.remove(t);
    }

    public void atualiza(Livro t) {
        dao.atualiza(t);
    }

    public List<Livro> listaTodos() {
        return dao.listaTodos();
    }

    public Livro buscaPorId(Integer id) {
        return dao.buscaPorId(id);
    }

    public List<Livro> listaTodosPaginada(int firstResult, int maxResults, String coluna, String valor,
            String campoOrdenacao, SortOrder sentidoOrdenacao) {
        return dao.listaTodosPaginada(firstResult, maxResults, coluna, valor, campoOrdenacao, sentidoOrdenacao);
    }

    public List<Livro> listaTodosPaginada(int firstResult, int maxResults, String coluna, Double valor,
            String campoOrdenacao, SortOrder sentidoOrdenacao) {
        return dao.listaTodosPaginada(firstResult, maxResults, coluna, valor, campoOrdenacao, sentidoOrdenacao);
    }


}

ERRO

java.lang.NullPointerException
    br.com.caelum.livraria.modelo.LivroDataModel.<init>(LivroDataModel.java:21)
    br.com.caelum.livraria.bean.LivroBean.<init>(LivroBean.java:31)
    sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
1 resposta
solução!

Resolvi, achei uma pergunta com o mesmo problema aqui no fóruma o que tive que fazer foi tirar o construtor da classe LivroDataModel e criar outro com @PostConstruct e usar @Inject no LivroBean, segue o código: LivroBean

@Inject
    private LivroDataModel livroDataModel;

LivroDAtaModel

package br.com.caelum.livraria.modelo;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.inject.Inject;

import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;

import br.com.caelum.livraria.dao.LivroDao;

public class LivroDataModel extends LazyDataModel<Livro> implements Serializable {

    private static final long serialVersionUID = 1L;

    @Inject
    LivroDao livroDao;


    @PostConstruct
    public void init() {
        super.setRowCount(this.livroDao.quantidadeDeElementos());
    }


    @Override
    public List<Livro> load(int inicio, int quantidade, String campoOrdenacao, SortOrder sentidoOrdenacao,
            Map<String, Object> filtros) {
        String titulo = (String) filtros.get("titulo");

        if (filtros.get("titulo") != null) {
            return this.livroDao.listaTodosPaginada(inicio, quantidade, "titulo", titulo, campoOrdenacao,
                    sentidoOrdenacao);
        } else if (filtros.get("isbn") != null) {
            String isbn = (String) filtros.get("isbn");
            return this.livroDao.listaTodosPaginada(inicio, quantidade, "isbn", isbn, campoOrdenacao, sentidoOrdenacao);

        } else if (filtros.get("preco") != null) {
            String preco = (String) filtros.get("preco");
            return this.livroDao.listaTodosPaginada(inicio, quantidade, "preco", preco, campoOrdenacao,
                    sentidoOrdenacao);
        } else if (filtros.get("data") != null) {
            String data = (String) filtros.get("data");
            return this.livroDao.listaTodosPaginada(inicio, quantidade, "data", data, campoOrdenacao, sentidoOrdenacao);
        } else if (filtros.get("genero") != null) {
            String genero = (String) filtros.get("genero");
            return this.livroDao.listaTodosPaginada(inicio, quantidade, "genero", genero, campoOrdenacao,
                    sentidoOrdenacao);
        }
        return this.livroDao.listaTodosPaginada(inicio, quantidade, "titulo", titulo, campoOrdenacao, sentidoOrdenacao);

    }

}