P:graphicImage problema no reload das imagens!

1 resposta
RenZasso

Salve salve caros amigos gujeiros!

Galera, preciso muito da ajuda de vocês! É o seguinte, estou utilizando o componente p:graphicImage do PRIMEFACES para gerar pequenos gráficos dentro de uma rich:dataTable. Ao serem geradas pela primeira vez, elas aparecem belezinha, porém, ás vezes (ou maioria das vezes) quando vou dar um reload na página para verificar o novo gráfico, as imagens carregam erradas ou ás vezes nem carregam. Alguém ja passou por um problema parecido e pode me dar uma mãozinha?

Um grande abraço pessoal!

1 Resposta

delki8

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?

Criado 26 de outubro de 2010
Ultima resposta 6 de set. de 2011
Respostas 1
Participantes 2