Olá!!!
Estou com um problema, e não consigo resolver porque estou aprendendo servlets agora :oops:
To criando um aservlet que gera um grafico do JFreeChart do tipo Meter, mas ai quero passar alguns parâmetros, para criar mais de um gráfico. (Classe1)
Tenho outra servlet que vai colocar a imagem no html. Faco um for (de teste) para criar a iteração e imprimir elas.
Ocorre este erro:java.lang.IllegalStateException: getWriter() has already been called for this response
O metodo da classe 1 esta separado dentro da classe.
A unica coisa que quero é conseguir colocar no html vários gráficos. Existe uma maneira mais fácil de fazer isso?
Classe1public synchronized JFreeChart geraMeter(Double nValorDial, Double nRangeMin, Double nRangeMax, int nTipo, String sLink, HttpServletRequest request, HttpServletResponse response)
{
DefaultValueDataset oValorDataset = new DefaultValueDataset(nValorDial);
MeterPlot oMeter = new MeterPlot(oValorDataset);
Range range = new Range(nRangeMin, nRangeMax);
oMeter.setRange(range);
oMeter.setDialShape(DialShape.PIE);
oMeter.setUnits("");
oMeter.setValuePaint(Color.WHITE);
oMeter.setDialBackgroundPaint(Color.WHITE);
oMeter.setDialOutlinePaint(Color.LIGHT_GRAY);
oMeter.setNeedlePaint(Color.GRAY);
// se o Meter é do tipo 1 ele será quanto maior melhor, entãos seta a label e as cores necessárias
if (nTipo == 1)
{
MeterInterval interval1 = new MeterInterval("Minimo", new Range(nRangeMin, 40.0), Color.GRAY, new BasicStroke(1), Color.GREEN);
MeterInterval interval2 = new MeterInterval("Medio", new Range(40.0, 80.0), Color.GRAY, new BasicStroke(1), Color.YELLOW);
MeterInterval interval3 = new MeterInterval("Maximo", new Range(80.0, nRangeMax), Color.GRAY, new BasicStroke(1), Color.RED);
oMeter.addInterval(interval1);
oMeter.addInterval(interval2);
oMeter.addInterval(interval3);
}
else
{
MeterInterval interval1 = new MeterInterval("Minimo", new Range(80.0, nRangeMax), Color.GRAY, new BasicStroke(1), Color.RED);
MeterInterval interval2 = new MeterInterval("Medio", new Range(40.0, 80.0), Color.GRAY, new BasicStroke(1), Color.YELLOW);
MeterInterval interval3 = new MeterInterval("Maximo", new Range(nRangeMin, 40.0), Color.GRAY, new BasicStroke(1), Color.GREEN);
oMeter.addInterval(interval1);
oMeter.addInterval(interval2);
oMeter.addInterval(interval3);
}
oMeter.setTickLabelsVisible(false);
JFreeChart oJChart = new JFreeChart(oMeter);
oJChart.removeLegend();
oJChart.setBackgroundPaint(Color.WHITE);
try
{
OutputStream out = response.getOutputStream();
String type = request.getParameter("grafico");
response.setContentType("image/png");
ChartUtilities.writeChartAsPNG(out, oJChart, 100, 100);
out.close();
}
catch (IOException ex)
{
ex.printStackTrace();
}
return oJChart;
}
protected synchronized void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
PrintWriter out = new PrintWriter(response.getWriter());
ArrayList oArray = new ArrayList();
oArray.add(50.0);
oArray.add(98.0);
oArray.add(34.0);
oArray.add(90.0);
response.setContentType("text/html");
out.println("<html>");
out.println("<head>");
out.println("<title>Meters</title>");
out.println("</head>");
out.println("<body>");
for (int i = 0; i < oArray.size(); i++)
{
Double nValorDial = (Double) oArray.get(i);
Double nRangeMin = 0.0;
Double nRangeMax = 100.0;
int nTipo = 1;
String sLink = "http://teste.com.br";
wsqoGraficoMeter oMeter = new wsqoGraficoMeter();
JFreeChart chart = oMeter.geraMeter(nValorDial, nRangeMin, nRangeMax, nTipo, sLink, request, response);
try
{
String param = request.getParameter("grafico");
out.println("<p>");
out.println("<img src=\"wsqoGraficoMeter?tipo=" + chart + "\" border=0 width=400 heigth=300/>");
out.println("&nbsp;&nbsp; &nbsp;");
}
catch (Exception e)
{
System.err.println("*************** ERRO ***************");
System.err.println(e.toString());
}
}
out.println("</body>");
out.println("</html>");
out.flush();
out.close();
}
Abraços!
, o jeito para resolver isto… talves seria vc gerar a imagem e guardar num local temporário no seu servidor… e colocar as tags de inclusão de imagens no html… acho que resolve… mas deixa a pergunta ae, tem gente aqui no PJ que saca bam mais de web que eu…