Boa tarde pessoal, estou passando pelo mesmo problema do companheiro acima. Estou usando jFreeChart para gerar um gráfico. Quando o servidor é iniciado e a página é carregada o gráfico aparece normalmente, mas se eu der um F5 o gráfico não aparece mais e volta a aparecer apenas quando eu reinicio o servidor.
Eis o meu managedBean responsável por gerar o gráfico:
package br.com.entun.control;
import java.awt.Color;
import java.io.File;
import java.io.FileInputStream;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.List;
import java.util.Locale;
import java.util.logging.Logger;
import javax.el.ELContext;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;
import br.com.entun.dao.PagamentoDao;
import br.com.entun.entidade.Pagamento;
import br.com.entun.util.RenderizadorGraficoPizza;
@ManagedBean
@SessionScoped
public class GraficoEntun {
private StreamedContent chart;
private static final Logger logger = Logger.getLogger(GraficoEntun.class.getName());
private double percentualDespesas;
private double percentualReceitas;
public GraficoEntun() {
//Chart
try {
JFreeChart jfreechart = criarGrafico(createDataset());
File chartFile = new File("dynamichart");
ChartUtilities.saveChartAsPNG(chartFile, jfreechart, 590, 300);
chart = new DefaultStreamedContent(new FileInputStream(chartFile), "image/png");
} catch (Exception e) {
logger.severe(e.getMessage());
}
}
private PieDataset createDataset() {
NumberFormat formatador = DecimalFormat
.getNumberInstance(new Locale("pt", "BR"));
PagamentoDao pagamentoDao = new PagamentoDao();
FacesContext facesContext = FacesContext.getCurrentInstance();
ELContext elContext = facesContext.getELContext();
PagamentoBean pagamentoBean = (PagamentoBean)
facesContext.getApplication().getELResolver().getValue(elContext, null, "pagamentoBean");
List<Pagamento> pagamentos = pagamentoBean.getPagamentos();
BigDecimal valorDespesas = pagamentoDao
.somarValorPorTipo(pagamentos, "DESPESA");
BigDecimal valorReceitas = pagamentoDao
.somarValorPorTipo(pagamentos, "RECEITA");
DefaultPieDataset dataSet = new DefaultPieDataset();
dataSet.setValue("Despesas [" + formatador
.format(valorDespesas) + "]", valorDespesas);
dataSet.setValue("Receitas [" + formatador
.format(valorReceitas) + "]", valorReceitas);
BigDecimal total = (valorDespesas.add(valorReceitas));
if (total.doubleValue() > 0){
percentualDespesas= valorDespesas.multiply(new BigDecimal(100)).divide(total, 2, RoundingMode.HALF_UP).doubleValue();
percentualReceitas = valorReceitas.multiply(new BigDecimal(100)).divide(total, 2, RoundingMode.HALF_UP).doubleValue();
}else{
percentualDespesas = 0;
percentualReceitas = 0;
}
return dataSet;
}
private JFreeChart criarGrafico(PieDataset dataSet){
String titulo = "Despesas: "+percentualDespesas+"%"+" | "+"Receitas: "+percentualReceitas+"%" ;
JFreeChart chart = ChartFactory
.createPieChart3D(titulo,
dataSet, false, true, false);
PiePlot3D plot = (PiePlot3D) chart.getPlot();
Color[] colors = {Color.red, Color.green};
RenderizadorGraficoPizza renderer = new RenderizadorGraficoPizza(colors);
renderer.setColor(plot, dataSet);
plot.setBackgroundPaint(Color.WHITE);
plot.setOutlinePaint(Color.WHITE);
plot.setStartAngle(290);
plot.setForegroundAlpha(0.5f);
return chart;
}
public StreamedContent getChart() {
System.out.println(chart);
return chart;
}
}
Alguma dica galera?