Olá Pessoal,
Tenho uma appicação em JSF e quero gerar graficos em uma JSP usando JFreeChart sem nenhuma outra taglib.
Bom utilizei uma servlet e consegui renderizar o gráfico na página, a solução que encontrei foi no metodo que retorna a imagem ao inves de retorna-la, o metodo é void e seta a imagem em uma array de byte, pego esse array e jogo na tela o gráfico com a tag <s:graphicImage url=“ChartServlet”> (nome da servlet na url).
O que eu quero fazer agora é utilizar uma atributo do Menage Bean para realizar o mesmo processo para exibir o gráfico chamando a tag <s:graphicImage url="#{chartBean.Charts}"> por exemplo.
Servlet:
[code]
import java.awt.Color;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.Plot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
public class ChartServlet extends HttpServlet {
/**
* atributo serial;
*/
private static final long serialVersionUID = -1997245402770915920L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGeneratePieChart(request,response);
}
protected void doGeneratePieChart(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
try {
DefaultPieDataset ds = new DefaultPieDataset();
ds.setValue("Norte", 13000000);
ds.setValue("Nordeste", 48000000);
ds.setValue("Centro-Oeste", 11000000);
ds.setValue("Sudeste", 73000000);
ds.setValue("Sul", 25500000);
JFreeChart chart =
ChartFactory.createPieChart("População Nacional", ds, true, false, false);// create your chart
chart.setBackgroundPaint(Color.white);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
ChartUtilities.writeChartAsJPEG(baos, 1.0F, chart,400, 250, info);
response.setContentType("image/jpg");
OutputStream out = new BufferedOutputStream(response.getOutputStream());
out.write(baos.toByteArray());
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}[/code]
JSP:
[code]
<%@ page language=“java” contentType=“text/html;charset=UTF-8” pageEncoding=“UTF-8”%>
<%@ taglib prefix=“tiles” uri=“http://struts.apache.org/tags-tiles”%>
<%@ taglib uri=“http://java.sun.com/jsf/core” prefix=“f”%>
<%@ taglib uri=“http://java.sun.com/jsf/html” prefix=“h”%>
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
<html>
<body>
<h:form>
<f:verbatim>
<h:graphicImage url=“ChartServlet”/> // ao em vez de chamar a servlet , chamar o atributo do bean
</f:verbatim>
</h:form>
</body>
</html> [/code]
Alguém tem alguma dica, ajuda?
Obrigado.