JfreeChart with seam (ToolTip problem)
itays100 Nov 13, 2011 7:43 AMI am trying to generate chart from seam application and I used the code below from the JFreeChart war file.
public static String generateXYChart(String section, HttpSession session, PrintWriter pw) { String filename = null; try { // Retrieve list of WebHits WebHitDataSet whDataSet = new WebHitDataSet(); ArrayList list = whDataSet.getDataByHitDate(section); // Throw a custom NoDataException if there is no data if (list.size() == 0) { System.out.println("No data has been found"); throw new NoDataException(); } // Create and populate an XYSeries Collection XYSeries dataSeries = new XYSeries("Hits"); Iterator iter = list.listIterator(); while (iter.hasNext()) { WebHit wh = (WebHit)iter.next(); dataSeries.add(wh.getHitDate().getTime(),wh.getHitCount()); } XYSeriesCollection xyDataset = new XYSeriesCollection(dataSeries); // Create tooltip and URL generators SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy", Locale.UK); StandardXYToolTipGenerator ttg = new StandardXYToolTipGenerator( StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT, sdf, NumberFormat.getInstance()); TimeSeriesURLGenerator urlg = new TimeSeriesURLGenerator( sdf, "pie_chart.jsp", "series", "hitDate"); // Create the chart object ValueAxis timeAxis = new DateAxis(""); NumberAxis valueAxis = new NumberAxis(""); valueAxis.setAutoRangeIncludesZero(false); // override default StandardXYItemRenderer renderer = new StandardXYItemRenderer( StandardXYItemRenderer.LINES + StandardXYItemRenderer.SHAPES, ttg, urlg); renderer.setShapesFilled(true); XYPlot plot = new XYPlot(xyDataset, timeAxis, valueAxis, renderer); JFreeChart chart = new JFreeChart("", JFreeChart.DEFAULT_TITLE_FONT, plot, false); chart.setBackgroundPaint(java.awt.Color.white); // Write the chart image to the temporary directory ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection()); filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session); // Write the image map to the PrintWriter ChartUtilities.writeImageMap(pw, filename, info); pw.flush(); } catch (NoDataException e) { System.out.println(e.toString()); filename = "public_nodata_500x300.png"; } catch (Exception e) { System.out.println("Exception - " + e.toString()); e.printStackTrace(System.out); filename = "public_error_500x300.png"; } return filename; }
I have this code in my seam entity:
@Entity @Table(name = "myobject", catalog = "my_object") public class MyObject implements java.io.Serializable { ..... @Transient public String getChartFileName() { PrintWriter pw = new PrintWriter(System.out); ExternalContext extCtxt = FacesContext.getCurrentInstance().getExternalContext(); javax.servlet.http.HttpServletRequest request = (javax.servlet.http.HttpServletRequest)extCtxt.getRequest(); String reqUrl = request.getRequestURL().toString(); this.fileName = WebHitChart.generateXYChart("Service", request.getSession(), pw); System.out.println("filename - " + fileName); String graphURL = reqUrl + "/servlet/DisplayChart?filename=" + fileName; return graphURL; }
And I have this in my .xhtml:
<img id="myChartId" src="#{myobject.chartFileName}" usemap="##{myobject.chartShortName}">
I able to see the chart on the page but the tooltip is not shown on mouseover like the example.
The map tag is not generated as I check the generated html.
I should be able to see something like this:
<MAP NAME="jfreechart-3299886008362407185.png"> <AREA SHAPE="POLY" COORDS="92,242,98,242,98,248,92,248,92,242,92,242" title="Hits: (01-Aug-2002, 235,059)" href="pie_chart.jsp?series=Hits&hitDate=01-Aug-2002"> <AREA SHAPE="POLY" COORDS="106,234,112,234,112,240,106,240,106,234,106,234" title="Hits: (02-Aug-2002, 240,635)" href="pie_chart.jsp?series=Hits&hitDate=02-Aug-2002"> <AREA SHAPE="POLY" COORDS="148,223,154,223,154,229,148,229,148,223,148,223" title="Hits: (05-Aug-2002, 248,903)" href="pie_chart.jsp?series=Hits&hitDate=05-Aug-2002">
I'm not sure if it seam related or not but hopefully someone here had the same situation before.
Thanks.