Dashboards gerados no Bean + GraphicImage

1 resposta
W

Pessoal,

Estou tentando gerar dashboards a partir do bean e mostrá-lo via XHTML.

package br.com.testes.model;

import java.io.File;
import java.io.FileInputStream;
import java.io.Serializable;

import javax.faces.application.Application;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.component.html.HtmlOutputText;
import javax.faces.context.FacesContext;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.primefaces.component.dashboard.Dashboard;
import org.primefaces.component.graphicimage.GraphicImage;
import org.primefaces.component.panel.Panel;
import org.primefaces.model.DashboardColumn;
import org.primefaces.model.DashboardModel;
import org.primefaces.model.DefaultDashboardColumn;
import org.primefaces.model.DefaultDashboardModel;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;

@ManagedBean(name="dash")
@RequestScoped
public class DashboardsBean implements Serializable {

	private static final long serialVersionUID = 6730611213593761910L;

	public static final int DEFAULT_COLUMN_COUNT = 3;
	private int columnCount = DEFAULT_COLUMN_COUNT;
	private Dashboard dashboard;
	private DashboardModel model;
	private GraphicImage graphicImage;
	private StreamedContent chart;  

	public DashboardsBean() {
		model = new DefaultDashboardModel();
		FacesContext fc = FacesContext.getCurrentInstance();
		Application application = fc.getApplication();

		dashboard = (Dashboard) application.createComponent(fc, "org.primefaces.component.Dashboard", "org.primefaces.component.DashboardRenderer");
		dashboard.setId("dashboard");


		for (int i = 0, n = getColumnCount(); i < n; i++) {
			DashboardColumn column = new DefaultDashboardColumn();
			model.addColumn(column);
		}
		dashboard.setModel(model);

		int items = 5;

		for (int i = 0, n = items; i < n; i++) {
			Panel panel = (Panel) application.createComponent(fc, "org.primefaces.component.Panel", "org.primefaces.component.PanelRenderer");
			panel.setId("measure_" + i);
			panel.setHeader("Dashboard Component " + i);
			panel.setClosable(false);
			panel.setToggleable(false);


			getDashboard().getChildren().add(panel);
			DashboardColumn column = model.getColumn(i % getColumnCount());
			column.addWidget(panel.getId());
			HtmlOutputText text = new HtmlOutputText();
			text.setValue("Dashboard widget bits!");

			if(i == 0){
				teste();
				//graphicImage = new GraphicImage();
				graphicImage = (GraphicImage) application.createComponent(fc, "org.primefaces.component.GraphicImage", "org.primefaces.component.GraphicImageRenderer");
				graphicImage.setValue(getChart());
				graphicImage.setCache(true);
				graphicImage.setId("img_"+i);
				panel.getChildren().add(graphicImage);
			}else{
				panel.getChildren().add(text);
			}
		}
	}



	public void teste(){	
		try{
			JFreeChart jfreechart = ChartFactory.createPieChart("Turkish Cities", createDataset(), true, true, false);  
			File chartFile = new File("dynamichart"); 
			ChartUtilities.saveChartAsPNG(chartFile, jfreechart, 375, 300);
			setChart(new DefaultStreamedContent(new FileInputStream(chartFile), "image/png"));
		}catch (Exception e) {
			e.printStackTrace();
		}
	}



	private PieDataset createDataset() {  
		DefaultPieDataset dataset = new DefaultPieDataset();  
		dataset.setValue("Istanbul", new Double(45.0));  
		dataset.setValue("Ankara", new Double(15.0));  
		dataset.setValue("Izmir", new Double(25.2));  
		dataset.setValue("Antalya", new Double(14.8));  

		return dataset;  
	} 

	public String abrirPage(){
		return "relatorios";
	}

	public Dashboard getDashboard() {
		return dashboard;
	}

	public DashboardModel getModel() {
		return this.model;
	}

	public void setDashboard(Dashboard dashboard) {
		this.dashboard = dashboard;
	}

	public int getColumnCount() {
		return columnCount;
	}

	public void setColumnCount(int columnCount) {
		this.columnCount = columnCount;
	}

	public GraphicImage getGraphicImage() {
		return graphicImage;
	}

	public void setGraphicImage(GraphicImage graphicImage) {
		this.graphicImage = graphicImage;
	}

	public StreamedContent getChart() {
		return chart;
	}

	public void setChart(StreamedContent chart) {
		this.chart = chart;
	}
}

E no XHTML

<h:form id="frmInbox">
				<p:dashboard id="board0" model="#{dash.model}" binding="#{dash.dashboard}">
				</p:dashboard>
			</h:form>

O que ocorre é que. os dashboards estão sendo criados.

Só que tento adicionar dentro do 1º dashboard o Chart criado e o dashboard não mostra o chart. O chart está sendo gerado com o exemplo do Showcase do primefaces.

Quando faço uma exibição direta no xhtml fora do dashboard o graphiImage com o Chart ele é exibido normalmente.

Alguém já fez algo desse tipo, dinâmico?

Pode me ajudar a encontrar onde está faltando ajuste.

Ou tem algum outro exemplo que funcione?

Obrigado

1 Resposta

W

Alguém já fez um programa desse tipo??

obrigado

Criado 30 de abril de 2012
Ultima resposta 2 de mai. de 2012
Respostas 1
Participantes 1