Estou criando um gráfico com JFreeChart e tentando apresentá-lo com Cewolf num página web, onde na página inicial passo a data inicio e fim para pesquisar no banco.
No index passo os dados de entrada e chamo o servlet que encapsula os dados de entrada num objeto do tipo Map e cria um Dataset.
index.jsp:
<script type="text/javascript">
$(document).ready(function() {
$("a").click(function() {
alert($("#item").val() + " - " + $("#subitem").val() + " - " + $("#de").val() + " - "+ $("#ate").val());
$.ajax({
type: "POST",
// url: "grafico.jsp",
url: "CertificacaoEstadoDataSeti",
data: "item=" + $("#item").val() + "&subitem="+ $("#subitem").val() + "&de="+ $("#de").val() + "&ate="+ $("#ate").val(),
beforeSend: function() {
},
success: function(txt) {
$('#divGraficos').html(txt);
},
error: function(txt) {
}
});
});
});
</script>
<body>
<h3>Botão Chama Gráfico</h3>
Item:
<select name="item" id="item">
<option value="VAZIO"> VAZIO </option>
<option value="7248"> Item Um </option>
<option value="7241"> Item Dois </option>
<option value="7244"> Item Três </option>
</select>
<br><br>
Subitem:
<select name="subitem" id="subitem">
<option value="VAZIO"> Vazio</option>
<option value="7251"> SubItem Um</option>
<option value="7252"> SubItem Dois</option>
<option value="7253"> SubItem Três</option>
</select>
<br><br>
Período de:
<input type="text" size="8" name="de" id="de" class="mesano"/>
Até
<input type="text" size="8" name="ate" id="ate" class="mesano"/>
<br><br>
<a href="#"><img alt="Gera Gráfico" src="btn_graf1.jpg"></a>
<div id="divGraficos"></div>
Servlet
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String item = request.getParameter("item");
String subitem = request.getParameter("subitem");
String de = request.getParameter("de");
String ate = request.getParameter("ate");
System.out.println("DADOS DE ITEM "+item+" "+subitem+" "+de+" "+ate);
CertificacaoEstadoDataSet dataSet = new CertificacaoEstadoDataSet();
Map<Integer, String> m = new HashMap<Integer, String>();
m.put(1, item);
m.put(2, subitem);
m.put(3, de);
m.put(4, ate);
try {
dataSet.produceDataset(m);
request.setAttribute("graficoDS", dataSet);
} catch (DatasetProduceException e) {
e.printStackTrace();
}
RequestDispatcher dispatcher = request.getRequestDispatcher("grafico.jsp");
dispatcher.forward(request, response);
}
DataSet
DefaultPieDataset ds = new DefaultPieDataset();
Connection connection = ConnectionFactoryHomolog.getConnection();
String frase = (String) args.get(1);
String subfrase = (String) args.get(2);
String de = (String) args.get(3);
String ate = (String) args.get(4);
System.out.println("DATASET: "+frase+" "+subfrase+" "+de+" "+ate);
String sql = "select r.nivelsatisfacao as satisfacao, count(1) as contador from relacionamento.satisfacao s join relacionamento.resposta r on s.id = r.satisfacao_id " +
"join relacionamento.subpergunta sub on sub.id = r.subpergunta_id join relacionamento.pergunta p on p.id = sub.pergunta_id " +
"where p.id = "+frase +" and sub.id = "+subfrase +" and to_char(s.data,'MM/yyyy') between '"+de+"' and '"+ate+"' " +
"group by r.nivelsatisfacao order by 1,2";
try {
PreparedStatement stmt = connection.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
while(rs.next()){
ds.setValue(rs.getString(1), rs.getInt(2));
}
} catch (SQLException e) {
e.printStackTrace();
}
return ds;
}
gráfico.jsp - onde o gráfico deveria estar sendo apresentado
<!-- Criando o bean -->
<center><h3>GRAFICO DE PIZZA</h3></center>
<!-- GRÁFICO SETORIAL/PIZZA -->
<cewolf:chart type="pie" id="grafico1" title="Certificações por Estado" showlegend="true">
<cewolf:gradientpaint>
<cewolf:point x="0" y="0" color="#FBFBFB" />
<cewolf:point x="350" y="0" color="#F3F3F3" />
</cewolf:gradientpaint>
<cewolf:data>
<cewolf:producer id="graficoDS" />
</cewolf:data>
</cewolf:chart>
<cewolf:img chartid="grafico1" height="380" width="710" renderer="/cewolf" />
coloquei um monte de system.out para me mostrar como estão sendo usados meus dados de entrada
Ao entrar no servlet, vejo que os dados que passei na tela inicial então chegando cortretos pelo reques.getParameter.
No dataSet, vejo que os mesmos dados de entrada estão chegando na query perfeitamente.
O problema é que ao enviar os dados para a tela grafico.jsp, aparece o resultado do system.out novamente na tela, mas com todos os dados nulos, como se algum comando na tela estivesse mandando rodar o dataSet novamente, só que desta vez, como não sendo chamada pelo Servlet, não recebe meus dados de entrada, e o gráfico aparece vazio na tela.
Como faço para o jsp não mandar rodar o dataSet novamente e somente usar o objeto que enviei à ele da primeira vez que o servlet o retornou.
Ou pelo menos como faço para o grafico.jsp rodar o dataSet recebendo os dados de entrada ?!
só um adendo. Abaixo está meu web.xml, acho que ele de alguma forma manda reler o dataset e por isso os dados vão nulos
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Cewolf</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>CewolfServlet</display-name>
<servlet-name>CewolfServlet</servlet-name>
<servlet-class>de.laures.cewolf.CewolfRenderer</servlet-class>
<init-param>
<param-name>storage</param-name>
<param-value>de.laures.cewolf.storage.TransientSessionStorage</param-value>
</init-param>
<init-param>
<param-name>overliburl</param-name>
<param-value>overlib.js</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CewolfServlet</servlet-name>
<url-pattern>/cewolf/*</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>CertificacaoEstadoDataSeti</display-name>
<servlet-name>CertificacaoEstadoDataSeti</servlet-name>
<servlet-class>br.eti.furutani.dataset.CertificacaoEstadoDataSeti</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CertificacaoEstadoDataSeti</servlet-name>
<url-pattern>/CertificacaoEstadoDataSeti</url-pattern>
</servlet-mapping>
</web-app>
Obrigado pela atenção