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

null at org.primefaces.component.chart.renderer.BarRenderer.encodeData

help? no vídeo ele também recebe null mas corrige o random no getVendas, no meu caso já corrigi e continua...

fiz um sysout do series e não está nul.. System.out.println(series.get(0).getData());

parece ser na renderização da página mesmo...

também tentei usar o @PosConstruct e ocorre o mesmo erro... @PostConstruct public void init() { getVendasModel(); }

HTTP Status 500 – Internal Server Error
Type Exception Report

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

javax.servlet.ServletException
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:671)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Root Cause

java.lang.NullPointerException
    org.primefaces.component.chart.renderer.BarRenderer.encodeData(BarRenderer.java:35)
    org.primefaces.component.chart.renderer.BasePlotRenderer.render(BasePlotRenderer.java:29)
    org.primefaces.component.chart.ChartRenderer.encodeScript(ChartRenderer.java:95)
    org.primefaces.component.chart.ChartRenderer.encodeEnd(ChartRenderer.java:68)
    javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:920)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
    com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:458)
    com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:134)
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:659)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Note The full stack trace of the root cause is available in the server logs.

Apache Tomcat/8.5.31
5 respostas

Oi Aline,

Posta aqui o código do seu ManagedBean e do XHTML também.

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

    <ui:composition template="_template.xhtml">


        <ui:define name="titulo">
                <p:outputPanel>Vendas</p:outputPanel>
        </ui:define>

        <ui:define name="conteudo">
            <p:chart type="bar" model="#{vendasBean.vendasModel}" style="height:300px" />        
        </ui:define>

    </ui:composition>

</html>
package br.com.caelum.livraria.bean;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import javax.annotation.ManagedBean;
import javax.annotation.PostConstruct;
import javax.faces.bean.ViewScoped;

import org.primefaces.component.chart.renderer.BarRenderer;
import org.primefaces.model.chart.Axis;
import org.primefaces.model.chart.AxisType;
import org.primefaces.model.chart.BarChartModel;
import org.primefaces.model.chart.ChartSeries;

import br.com.caelum.livraria.dao.DAO;
import br.com.caelum.livraria.modelo.Livro;
import br.com.caelum.livraria.modelo.Venda;

@ManagedBean
@ViewScoped
public class VendasBean {

     private BarChartModel barModel;

//    @PostConstruct
//    public void init() {
//        createBarModel();
//        //getVendasModel();
//    }
//    
//    private void createBarModel() {
//        barModel = getVendasModel();
//         
//        barModel.setTitle("Bar Chart");
//        barModel.setLegendPosition("ne");
//         
//        Axis xAxis = barModel.getAxis(AxisType.X);
//        xAxis.setLabel("Gender");
//         
//        Axis yAxis = barModel.getAxis(AxisType.Y);
//        yAxis.setLabel("Births");
//        yAxis.setMin(0);
//        yAxis.setMax(200);
//    }

    public List<Venda> getVendas() {

        List<Livro> livros = new DAO<Livro>(Livro.class).listaTodos();
        List<Venda> vendas = new ArrayList<>();

        Random random = new Random(12345);

        for (Livro livro : livros) {

            Integer quantidade = random.nextInt(500);
            vendas.add(new Venda(livro, quantidade));


        }

        return vendas;
    }

    public BarChartModel getVendasModel() {

        BarChartModel model = new BarChartModel();

        ChartSeries vendaSerie = new ChartSeries();
        vendaSerie.setLabel("Vendas 2016");

        List<Venda> vendas = getVendas();

        for (Venda venda : vendas) {
            vendaSerie.set(venda.getLivro().getTitulo(), venda.getQuantidade());
        }

        model.addSeries(vendaSerie);

        return model;
    }
}
solução!

Oi Aline,

Pode ser o import da anotação @ManagedBean que está incorreto.

No seu código está sendo importado do pacote javax.annotation.ManagedBean, mas deveria ser do pacote do JSF: javax.faces.bean.ManagedBean.

Veja se com isso resolve.

era isso mesmo! obg!! =D