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):
[code]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;
}
}[/code]
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):
[code]<%@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);
%>
<%=chart0.imageMap%> <%=chart1.imageMap%> [/code] VendaDao: [code]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;
}[/code]
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?