最近在研究fusioncharts报表,今天遇到一个问题很纠结,始终无法明确xml数据源的路径,忘高手指点:
后台:
public String showChart(){
try {
                           //获得数据集
List<SaleNum> list = this.saleNumService.getSaleNum();
Document document = DocumentHelper.createDocument();
document.setXMLEncoding("utf-8");
Element eGraph = document.addElement("graph");
 eGraph.addAttribute("caption", "sale") ;
 eGraph.addAttribute("xAxisName",  "mon");
 eGraph.addAttribute("yAxisName", "Units");
 eGraph.addAttribute("showNames", "1") ;
 eGraph.addAttribute("decimalPrecision", "0");
 eGraph.addAttribute("formatNumberScale","0") ;
 for(int i = 0;i < list.size(); i++){
 Element eSet = eGraph.addElement("set");
 eSet.addAttribute("label", list.get(i).getMonth());
 eSet.addAttribute("value", list.get(i).getNum().toString());
 eSet.addAttribute("color", "17400") ;
 }
 String path = Address.getAddress();//path是tomcat\webapps\项目名称
 Writer out = new FileWriter(path+"\\data.xml");
 OutputFormat format = OutputFormat.createPrettyPrint(); 
 format.setEncoding("UTF-8"); 
 XMLWriter writer = new XMLWriter(out,format);
 writer.write(document);
 writer.close();
 System.out.println("xml生成成功");
} catch (Exception e) {
System.out.println("xml生成失败");
e.printStackTrace();
}
return "showChart";
}前台:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
String path1 = System.getProperty("user.dir");
int num = path1.indexOf("\\bin");
String path2 = path1.substring(0,num);
out.println(path1+"\n");
out.println(path+"\n");
out.println(basePath);
out.println(path2);
String path3 = path2+"\\webapps\\ZZXJ2\\data.xml";
out.println(path3);
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>chart1</title>
    
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript" src="<%=request.getContextPath() %>/js/FusionCharts.js"></script>
  </head>
  
  <body>
   <div id="chartdiv" align="center">图形将出现在这个DIV里面,会覆盖文字</div>
   <script type="text/javascript">
    var myChart = new FusionCharts("<%=request.getContextPath()%>/FusionCharts/Column3D.swf","myChartId","600","500");
   
    myChart.setDataURL("<%=path3%>");
       
    myChart.render("chartdiv");
   </script>
  </body>
</html>页面flash看不到只有 Error in loading data.  就是xml文件的位置不对,因为生成的文件我试过,能够生成报表。请大侠指教

解决方案 »

  1.   

    我以前弄的时候也出过这种问题唉`后来我就干脆直接把xml的内容读出到前台显示了。用setDataXML()这个函数。
      

  2.   

    我用fusioncharts就没让它生成过xml
    直接把要用的东西用Stringbuffer拼成一个xml传到前台
    setDataXML MS是这个 忘的差不多了
    还有fusioncharts就像ajax一样 可以局部刷新的
      

  3.   

    如果在引用xml数据源时,怎么样来给它的相对路径呢,此相对路径是相对于当前jsp页面。
      

  4.   

    String path = Address.getAddress();//path是tomcat\webapps\项目名称换成basePath试试。
      

  5.   

    很简单。给你举个例子
    例如:
    jsp的路径是:
    WebRoot下得xxx.jsp
    data.xml数据路径:
    FusionCharts/data.xml引用路径
    myChart.setDataURL("FusionCharts/data.xml");如果jsp路径是在某个文件夹下。例如:
    WebRoot/jsp/xxx.jsp引用路径
    myChart.setDataURL("../FusionCharts/data.xml");意思就是说,先把路径退回到同级,然后在进入FusionCharts文件夹下的data.xml数据。