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

Problema com Null point exception na classe LivroDataModel

Na minha implementação de livroDataModel tive que fazer alterações para que funcionasse com o primefaces 8 , antes do cdi esta assim :

import java.util.List;
import java.util.Map;

import org.primefaces.model.FilterMeta;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortMeta;

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

public class LivroDataModel extends LazyDataModel<Livro> {

    private static final long serialVersionUID = 2948232237230849780L;

    private DAO<Livro> dao;

    public LivroDataModel() {
        this.dao = new DAO<Livro>(Livro.class);
    }

    @Override
    public List<Livro> load(int first, int pageSize, Map<String, SortMeta> sortBy, Map<String, FilterMeta> filterBy) {        
        List<Livro> livroList = dao.primeFacesFilter(first, pageSize, sortBy, filterBy);
        int rowCount = dao.primeFacesFilterCount(filterBy);        
        super.setRowCount(rowCount);
        return livroList;
    }    

}

Funcionava perfeitamente os filtros e ordenações.

Jogando para CDI sempre retorna NullPointerException

GRAVE: Error Rendering View[/livro.xhtml]
java.lang.NullPointerException
    at br.com.caelum.livraria.modelo.LivroDataModel.load(LivroDataModel.java:27)
    at org.primefaces.model.LazyDataModel.load(LazyDataModel.java:144)
    at org.primefaces.component.datatable.DataTable.loadLazyData(DataTable.java:567)
    at org.primefaces.component.datatable.DataTableRenderer.preRender(DataTableRenderer.java:130)
    at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:93)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:920)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863)
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:890)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:458)
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:134)
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:659)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

Parece que ele não está consegiondo injetar o LivroDao , mas todas as outras funcionalidades da tela de livro estão funcionando , só a paginação que não.Tentei forçar o DAO retornar um valor não nulo mas sempre volta o java.lang.NullPointerException , mesmo que eu chame um método mais simples como o listaTodos.

https://github.com/sistemaswebbrasil/javaee-alura/blob/master/livraria/src/br/com/caelum/livraria/modelo/LivroDataModel.java https://github.com/sistemaswebbrasil/javaee-alura/blob/master/livraria/src/br/com/caelum/livraria/dao/DAO.java https://github.com/sistemaswebbrasil/javaee-alura/blob/master/livraria/src/br/com/caelum/livraria/dao/LivroDao.java

1 resposta
solução!

O problema era a chamada do livroDataModel no LivroBean , estava assim :

private LivroDataModel livroDataModel = new LivroDataModel();

Resolvido com :

@Inject
private LivroDataModel livroDataModel;    

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