Dúvida Gráficos ChartDirector e V-Raptor

0 respostas
C

Olá, estou desenvolvendo um sistema WEB e estou usando na parte de gráficos o ChartDirector, iniciei a aprendizado essa semana no ChartDirector, basicamente a minha dúvida é em criar um gráfico com parâmetros, ou seja, eu teria um formulário onde o usuário entra com a data inicial e final e o gráfico é gerado usando estes filtros. Seguem as classes e JSP:

JSP com o formulário:
<form method="post" action="Gera_Grafico_Venda_Web">
        <p>Data Inicial:
            <input name="grafico.data_inicial" type="text" id="data_inicial" value="" size="17"/>
            Data Final:
            <input name="grafico.data_final" type="text" id="grafico.data_final" value="" size="17"/>
            Meta:
            <input name="grafico.meta" type="text" id="grafico.meta" value="" size="17"/>
        </p>
        <input name="grafico.cod_funcinario" type="text" value="${cod_funcionario}" size="5"/>
        <input name="Gerar_Grafico" type="submit" id="Gerar_Grafico" value="Gerar Grafico"/>
    </form>
Classe Grafico (usada para armazenar os dados do formulario):
public class Grafico {
    private Date data_inicial, data_final;
    private int meta, cod_funcionario;

    public Date getData_final() {
        return data_final;
    }

    public void setData_final(Date data_final) {
        this.data_final = data_final;
    }

    public Date getData_inicial() {
        return data_inicial;
    }

    public void setData_inicial(Date data_inicial) {
        this.data_inicial = data_inicial;
        System.out.println("Dat: " + data_inicial);
    }

    public int getMeta() {
        return meta;
    }

    public void setMeta(int meta) {
        this.meta = meta;
    }

    public int getCod_funcionario() {
        return cod_funcionario;
    }

    public void setCod_funcionario(int cod_funcionario) {
        this.cod_funcionario = cod_funcionario;
    }
}
ConsultorController (usada para chamar a action do formulário):
public void Gera_Grafico_Venda_Web(Grafico grafico) {
        grafico.setData_inicial(new Date());
        System.out.println("Data: " + grafico.getData_inicial());
        result.redirectTo(ConsultorController.class).anglepie();
    }
JSP anglepie (jsp do gráfico):
<%@page import="ChartDirector.*" %>
<%@page import="javax.servlet.http.*" %>
<%@page import="br.bmweb.dao.VendaDao" %>
<%@page import="br.bmweb.controller.GraficoController" %>
<%@ page import="java.util.Vector" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@page import="br.bmweb.bean.Grafico" %>
<%!
// A simple structure to represent a chart image with an image map
private static class ImageWithHotSpot
{
    String imageURL;
    String imageMap;
}

// Function to create the demo charts
ImageWithHotSpot createChart(HttpServletRequest request, int index)
{
    // Determine the starting angle and direction based on input parameter
    int angle = 0;
    boolean clockwise = true;
    if (index != 0) {
        angle = 90;
        clockwise = false;
    }
    VendaDao vendadao = new VendaDao();
    Grafico g = new Grafico();
    System.out.println("Inicial: " + g.getData_inicial());
   
    //vendadao.venda_web_Tipo(request.getAttribute("data_inicial"), request.getAttribute("data_final"), request.getAttribute("meta"));
  //  GraficoController grafico = new GraficoController();
    VendaDao ven = new VendaDao();
   // The data for the pie chart
   double[] data = ven.venda_web_valor();
 // System.out.println("A "+data[0]);
 // System.out.println("B "+data[1]);
   // The labels for the pie chart

   /*----------------------Nessa linha tento pegar os parâmetros do formulário e passar para a consulta------------------------------------------*/
   String [] labels = vendadao.venda_web_Tipo(request.getAttribute("data_inicial"), request.getAttribute("data_final"), request.getAttribute("meta"));

    // Create a PieChart object of size 280 x 240 pixels
    PieChart c = new PieChart(280, 240);

    // Set the center of the pie at (140, 130) and the radius to 80 pixels
    c.setPieSize(140, 130, 80);

    // Add a title to the pie to show the start angle and direction
    if (clockwise) {
        c.addTitle("Start Angle = " + angle + " degrees\nDirection = Clockwise");
    } else {
        c.addTitle("Start Angle = " + angle + " degrees\nDirection = AntiClockwise");
    }

    // Set the pie start angle and direction
    c.setStartAngle(angle, clockwise);

    // Draw the pie in 3D
    c.set3D();

    // Set the pie data and the pie labels
    c.setData(data, labels);

    // Explode the 1st sector (index = 0)
    c.setExplode(0);

    // Output the chart
    ImageWithHotSpot ret = new ImageWithHotSpot();
    ret.imageURL = c.makeSession(request, "chart" + index);

    // Include tool tip for the chart
    ret.imageMap = c.getHTMLImageMap("", "",
        "title='{label}: US${value}K ({percent}%)'");

    return ret;
}
%>
<%
ImageWithHotSpot chart0 = createChart(request, 0);
ImageWithHotSpot chart1 = createChart(request, 1);
%>
<html>
<body style="margin:5px 0px 0px 5px">
<div style="font-size:18pt; font-family:verdana; font-weight:bold">
    Start Angle and Direction
</div>
<hr color="#000080">
<div style="font-size:9pt; font-family:verdana; margin-bottom:1.5em">
    <a href="viewsource.jsp?file=<%=request.getServletPath()%>">View Source Code</a>
</div>
<img src='<%=response.encodeURL("getchart.jsp?"+chart0.imageURL)%>'
    usemap="#map0" border="0">
<map name="map0"><%=chart0.imageMap%></map>
<img src='<%=response.encodeURL("getchart.jsp?"+chart1.imageURL)%>'
    usemap="#map1" border="0">
<map name="map1"><%=chart1.imageMap%></map>
</body>
</html>
VendaDao:
public String[] venda_web_Tipo(Object dataInicial, Object dataFinal, Object meta){
           System.out.println("Atingimos a meta !!!!");
           Grafico param = new Grafico();
           System.out.println("Data inicial: " + param.getData_inicial());
           System.out.println("Data final: " + param.getData_final());
        Session session = new AbreSession().getSession();
        Transaction tx = session.beginTransaction();
        Query query = session.createQuery("SELECT a.tipo_venda FROM Venda a WHERE a.cod_funcionario in (22,6)");

        List<String> x = query.list();


        String []resultado = {"",""};
        Iterator it = x.iterator();
        int i = 0;
       // for (int i = 0; i < documento2.size(); i++) {
         while(it.hasNext()) {
            resultado[i] = (String) it.next();
            i++;
        }
        tx.commit();
        session.close();
        return resultado;
    }
public double[] venda_web_valor(){
        Session session = new AbreSession().getSession();
        Transaction tx = session.beginTransaction();
        Query query = session.createQuery("SELECT COUNT(*) FROM Venda a WHERE a.cod_funcionario in (22,6) group by a.tipo_venda");

        List<Integer> x = query.list();
        int i = 0;
        double [] resultado = {0,0};
        Iterator it = x.iterator();
        while(it.hasNext()) {
            resultado[i] = Double.parseDouble(it.next().toString());
            i++;
        }
        tx.commit();
        session.close();
        return resultado;
    }

O que está ocorrendo de problemas é: Ao preencher o formulário e chamar o método "Gera_Grafico_Venda_Web" a classe Grafico está indo nula para este método, já revirei o código e não encontrei nada de errado para não estar setando.
Na linha 42 do anglepie.jsp tentei mandar executar o SELECT com os parâmetros vindos do formulário mas não deu certo pela classe Grafico estar nula. Alguém tem idéia de onde estou errando?

Criado 2 de novembro de 2010
Respostas 0
Participantes 1