Pessoal da uma ajuda aqui. Estou desenvolvendo a criação de gráfico a um projeto, para criar os gráfico estou utilizando cewolf+jfreechart. Porem está dando um erro na hora de apresentar os gráficos. Esse erro de "convert string" também estava no parâmetros 'value="true"', consegui resolver da maneira apresentada abaixo no jsp , porem para as cores não estou conseguindo resolver da mesma forma, porque apresenta um problema "Value of the param" no '#' do #FFFFFF.
Detalhes do projeto: apache-tomcat-5.5.25, ant1.6.5, hibernate3, struts, cewolf1.2.3, jfreechart-1.0.14.
ps: Talvez se usar o jfreechart puro iria resolver o problema em questão, mas não queria solucionar desta forma.
Segue o erro e os arquivos.
Erro:
org.apache.jasper.JasperException: Unable to convert string "#FFFFFF" to class "java.io.Serializable" for attribute "value": Property Editor not registered with the PropertyEditorManager at org.apache.jasper.runtime.JspRuntimeLibrary.getValueFromPropertyEditorManager(JspRuntimeLibrary.java:884) at org.apache.jsp.public.pages.graficoFiscaliza_jsp._jspx_meth_cewolf_005fparam_005f3(graficoFiscaliza_jsp.java:390) at org.apache.jsp.public.pages.graficoFiscaliza_jsp._jspService(graficoFiscaliza_jsp.java:256) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:403) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301) at org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:213) at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:171) at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145) at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92) at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:381) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) at java.lang.Thread.run(Unknown Source)
Pagina JSP:
<%@page contentType="text/html"%>
<%@page import="de.laures.cewolf.ChartPostProcessor"%>
<%@taglib uri="http://cewolf.sourceforge.net/taglib/cewolf.tld" prefix="cewolf" %>
<HTML>
<HEAD>
<TITLE>Cewolf Tutorial - Step 1</TITLE>
<link href="cewolf.css" rel="stylesheet" type="text/css">
</HEAD>
<BODY bgcolor="#DDE8F2">
<H1>Cewolf Tutorial</H1>
<H2>A Simple Page View Statistics Chart</H2>
<HR>
This page shows the resulting chart when finishing the Cewolf tutorial on the <a href="http://cewolf.sourceforge.net">Cewolf homepage</a>.<p>
<jsp:useBean id="pageViews" class="de.laures.cewolf.example.PageViewCountData"/>
<jsp:useBean id="lineRenderer" class="de.laures.cewolf.cpp.LineRendererProcessor" />
<jsp:useBean id="visualEnhancer" class="de.laures.cewolf.cpp.VisualEnhancer" />
<jsp:useBean id="legendItems" class="de.laures.cewolf.example.PageViewCountData" />
<cewolf:chart
id="line"
title="Page View Statistics"
type="line"
xaxislabel="Page"
yaxislabel="Views">
<cewolf:data>
<cewolf:producer id="pageViews"/>
</cewolf:data>
<cewolf:chartpostprocessor id="lineRenderer">
<cewolf:param name="shapes" value='<%=true%>' />
<cewolf:param name="outline" value='<%=true%>' />
<cewolf:param name="useFillPaint" value='<%=true%>' />
<cewolf:param name="fillPaint" value="#FFFFFF" />
<cewolf:param name="useOutlinePaint" value='<%=true%>' />
<cewolf:param name="outlinePaint" value="#000000" />
</cewolf:chartpostprocessor>
<%--
<cewolf:chartpostprocessor id="visualEnhancer">
<cewolf:param name="border" value="false"/>
<cewolf:param name="rangeIncludesZero" value="false"/>
</cewolf:chartpostprocessor>
--%>
<cewolf:chartpostprocessor id="legendItems">
<cewolf:param name="0" value="#FF0000"/>
<cewolf:param name="1" value="#FF0000"/>
<cewolf:param name="2" value="#FF0000"/>
<cewolf:param name="3" value="#FF0000"/>
</cewolf:chartpostprocessor>
<%--
--%>
</cewolf:chart>
<p>
<cewolf:img chartid="line" renderer="/cewolf" removeAfterRender="true" width="500" height="400">
<cewolf:map linkgeneratorid="pageViews" tooltipgeneratorid="pageViews"/>
</cewolf:img>
</BODY>
</HTML>
PageViewCountData:
package de.laures.cewolf.example;
import java.io.Serializable;
import java.util.Date;
import java.util.Map;
import de.laures.cewolf.DatasetProduceException;
import de.laures.cewolf.DatasetProducer;
import de.laures.cewolf.links.CategoryItemLinkGenerator;
import de.laures.cewolf.tooltips.CategoryToolTipGenerator;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
public class PageViewCountData
implements DatasetProducer, CategoryToolTipGenerator, CategoryItemLinkGenerator, Serializable
{
/**
*
*/
private static final long serialVersionUID = 1L;
private final String categories[] = {
"mon", "tue", "wen", "thu", "fri", "sat", "sun"
};
private final String seriesNames[] = {
"cewolfset.jsp", "tutorial.jsp", "testpage.jsp", "performancetest.jsp"
};
public Object produceDataset (Map params) throws DatasetProduceException
{
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
for (int series = 0; series < seriesNames.length; series++)
{
int lastY = (int)(Math.random() * 1000D + 1000D);
for (int i = 0; i < categories.length; i++)
{
int y = lastY + (int)(Math.random() * 200D - 100D);
lastY = y;
dataset.addValue(y, seriesNames[series], categories[i]);
}
}
return dataset;
}
public boolean hasExpired (Map params, Date since)
{
return System.currentTimeMillis() - since.getTime() > 0L;
}
public String getProducerId()
{
return "PageViewCountData DatasetProducer";
}
public String generateLink (Object data, int series, Object category)
{
return seriesNames[series];
}
public String generateToolTip(CategoryDataset arg0, int series, int arg2)
{
return seriesNames[series];
}
}
LegendItemPostProcessor:
package de.laures.cewolf.example;
import java.awt.Color;
import java.io.Serializable;
import java.util.Map;
import de.laures.cewolf.ChartPostProcessor;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.LegendItem;
import org.jfree.chart.LegendItemCollection;
import org.jfree.chart.plot.CategoryPlot;
public class LegendItemPostProcessor implements ChartPostProcessor, Serializable
{
/**
*
*/
private static final long serialVersionUID = 1L;
public void processChart (JFreeChart chart, Map<String,String> params) {
CategoryPlot plot = (CategoryPlot) chart.getPlot();
LegendItemCollection liColl = plot.getLegendItems();
for (int i = 0; i < liColl.getItemCount(); i++) {
LegendItem li = liColl.get(i);
String colorStr = params.get(String.valueOf(i));
li.setLabelPaint(Color.decode(colorStr));
}
}
}
Pessoal acabei utilizando o google charts, foi bem simples ele funciona por javascript, entao incorporei na pagina que queria. abraços
— Luiz Claudio 22 de abr de 2016