Ao tentar acessar a tela de vendas, onde é exibido o gráfico, ele dá o erro abaixo:
nov 14, 2017 12:33:14 PM com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
SEVERE: Error Rendering View[/vendas.xhtml]
javax.el.ELException: /vendas.xhtml @17,82 model="#{vendasBean.vendasModel}": Error reading 'vendasModel' on type br.com.caelum.livraria.bean.VendasBean
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
at org.primefaces.component.chart.Chart.getModel(Chart.java:104)
at org.primefaces.component.chart.renderer.BarRenderer.encodeData(BarRenderer.java:33)
at org.primefaces.component.chart.renderer.BasePlotRenderer.render(BasePlotRenderer.java:29)
at org.primefaces.component.chart.ChartRenderer.encodeScript(ChartRenderer.java:98)
Eu consegui fazer funcionar com o exemplo do PrimeFaces. Essa é a minha classe VendasBeans.java
package br.com.caelum.livraria.bean;
import java.util.ArrayList;
import java.util.Random;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.primefaces.model.chart.BarChartModel;
import org.primefaces.model.chart.ChartSeries;
import antlr.collections.List;
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 {
public BarChartModel getVendasModel() {
BarChartModel model = new BarChartModel();
ChartSeries vendaSerie = new ChartSeries();
vendaSerie.setLabel("Vendas 2016");
List<Venda> vendas = getVendas(1234);
for (Venda venda : vendas) {
vendaSerie.set(venda.getLivro().getTitulo(), venda.getQuantidade());
}
model.addSeries(vendaSerie);
ChartSeries vendaSerie2015 = new ChartSeries();
vendaSerie2015.setLabel("Vendas 2015");
vendas = getVendas(4321);
for (Venda venda : vendas) {
vendaSerie2015.set(venda.getLivro().getTitulo(),
venda.getQuantidade());
}
model.addSeries(vendaSerie2015);
return model;
}
public List<Venda> getVendas(long seed) {
List<Livro> livros = new DAO<Livro>(Livro.class).listaTodos();
List<Venda> vendas = new ArrayList<Venda>();
Random random = new Random(seed);
for (Livro livro : livros) {
Integer quantidade = random.nextInt(500);
vendas.add(new Venda(livro, quantidade));
}
return vendas;
}
}
Pelo pouco que eu entendi, falta o getVendas(), porém não é criado um getVendas() no vídeo.