URLGenerator and Javascript

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
raj_jfree
Posts: 20
Joined: Tue Sep 29, 2009 8:32 am
antibot: No, of course not.

URLGenerator and Javascript

Post by raj_jfree » Thu Oct 01, 2009 11:50 am

Hi,

i want to invoke a JavaScript function on clicking the bubble from bubble chart.
i had set the URL as below

xyitemrenderer.setURLGenerator(new StandardXYURLGenerator("javascript:alert('1');"));

This is returning me

href="javascript:alert('1');?series=0&item=0"

i want only href="javascript:alert('1');

how can i proceed..


For your reference if required :

package com.jasper.web;

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Paint;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.JScrollPane;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.StandardCategoryToolTipGenerator;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.chart.labels.StandardXYZToolTipGenerator;
import org.jfree.chart.labels.XYToolTipGenerator;
import org.jfree.chart.labels.XYZToolTipGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.xy.XYBubbleRenderer;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.urls.StandardCategoryURLGenerator;
import org.jfree.chart.urls.StandardXYURLGenerator;
import org.jfree.chart.urls.StandardXYZURLGenerator;
import org.jfree.chart.urls.XYURLGenerator;
import org.jfree.chart.urls.XYZURLGenerator;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.DatasetUtilities;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.xy.DefaultXYZDataset;
import org.jfree.data.xy.XYZDataset;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class BubbleChartController implements Controller {

private String successView;

public String getSuccessView() {
return successView;
}

public void setSuccessView(String successView) {
this.successView = successView;
}

public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setContentType("text/html");


JFreeChart jfreechart = createChart(createDataset());
try {
final ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());

final File file = new File(request.getRealPath("/BubbleChart.png"));
ChartUtilities.saveChartAsPNG(file, jfreechart, 600, 400, info);

File file2 = new File(request.getRealPath("/BubbleChart.html"));
final OutputStream out = new BufferedOutputStream(new FileOutputStream(file2));
// final PrintWriter writer = new PrintWriter(out);
final PrintWriter writer = response.getWriter();
writer.println("<HTML>");
writer.println("<HEAD><TITLE>Bubble Chart</TITLE></HEAD>");
writer.println("<BODY>");
ChartUtilities.writeImageMap(writer, "chart", info, true);
writer.println("<IMG SRC=\"BubbleChart.png\" " + "WIDTH=\"600\" HEIGHT=\"400\" BORDER=\"0\" USEMAP=\"#chart\">");
writer.println("</BODY>");
writer.println("</HTML>");
writer.close();

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return null;
}

public static XYZDataset createDataset() {
DefaultXYZDataset defaultxyzdataset = new DefaultXYZDataset();
double ad[] = { 2.1000000000000001D, 2.2999999999999998D, 2.2999999999999998D, 2.2000000000000002D, 2.2000000000000002D, 1.8D, 1.8D,
1.8999999999999999D, 2.2999999999999998D, 3.7999999999999998D };
double ad1[] = { 14.1D, 11.1D, 10D, 8.8000000000000007D, 8.6999999999999993D, 8.4000000000000004D, 5.4000000000000004D, 4.0999999999999996D,
4.0999999999999996D, 25D };
double ad2[] = { 2.3999999999999999D, 2.7000000000000002D, 2.7000000000000002D, 2.2000000000000002D, 2.2000000000000002D, 2.2000000000000002D,
2.1000000000000001D, 2.2000000000000002D, 1.6000000000000001D, 4D };
double ad3[][] = { ad, ad1, ad2 };
defaultxyzdataset.addSeries("Series 1", ad3);

return defaultxyzdataset;
}

private static JFreeChart createChart(XYZDataset xyzdataset) {
JFreeChart jfreechart = ChartFactory.createBubbleChart("Finally Got Bubble Chart", "X", "Y", xyzdataset, PlotOrientation.HORIZONTAL, true, true, true);
XYPlot xyplot = (XYPlot) jfreechart.getPlot();
xyplot.setForegroundAlpha(0.65F);
xyplot.setDomainPannable(true);
xyplot.setRangePannable(true);

XYItemRenderer xyitemrenderer = xyplot.getRenderer();

xyitemrenderer.setSeriesPaint(0, Color.blue);
NumberAxis numberaxis = (NumberAxis) xyplot.getDomainAxis();
numberaxis.setLowerMargin(0.14999999999999999D);
numberaxis.setUpperMargin(0.14999999999999999D);
NumberAxis numberaxis1 = (NumberAxis) xyplot.getRangeAxis();
numberaxis1.setLowerMargin(0.14999999999999999D);
numberaxis1.setUpperMargin(0.14999999999999999D);

xyitemrenderer.setURLGenerator(new StandardXYURLGenerator("javascript:alert('1');"));

return jfreechart;
}
}




Thanks in Advance

RichardWest
Posts: 844
Joined: Fri Oct 13, 2006 9:29 pm
Location: Sunnyvale, CA

Re: URLGenerator and Javascript

Post by RichardWest » Thu Oct 01, 2009 7:19 pm

If you read the StandardXYURLGenerator javadoc entry, you will see that the argument you pass is a prefix. The generateURL method appends a default argument string to and returns the resulting URL. If you want to change the behavior, create your own class which implements the XYURLGenerator interface (which is only the generateURL method).
Richard West
Design Engineer II
Advanced Micro Devices
Sunnyvale, CA

raj_jfree
Posts: 20
Joined: Tue Sep 29, 2009 8:32 am
antibot: No, of course not.

Re: URLGenerator and Javascript

Post by raj_jfree » Fri Oct 02, 2009 2:15 am

Thanks Richard...i am done with it....

I have one more requirement
xyitemrenderer.setURLGenerator(new StandardXYURLGenerator("javascript:alert('1');"));
in this javascript function javascript:function(?) i need to pass thew values dynamically is it possible ..i mean is there any URLGenerator for javascript functions.
JavascriptURLGenerator or so...




class StandardXYURLGenerator implements XYURLGenerator {
private String actionName;

public StandardXYURLGenerator(String actionName) {
if (actionName != null)
this.actionName = actionName;
}
public StandardXYURLGenerator() {
// TODO Auto-generated constructor stub
}
public String generateURL(XYDataset categoryDataset, int series, int category) {
String url = actionName;
return url;
}

RichardWest
Posts: 844
Joined: Fri Oct 13, 2006 9:29 pm
Location: Sunnyvale, CA

Re: URLGenerator and Javascript

Post by RichardWest » Mon Oct 05, 2009 6:27 pm

The generateURL method has the dateaset, the series index, and the item index as arguments which you can use to generate item specific URLs.
Richard West
Design Engineer II
Advanced Micro Devices
Sunnyvale, CA

Locked