返回首页
当前位置: 主页 > 网络编程 > Jsp实例教程 >

使用FusionCharts时出现的问题解决方案

时间:2012-10-10 23:00来源:知行网 编辑:麦田守望者

最近在用fusioncharts v3 来做报表
代码如下

var myChart = new FusionCharts("fusioncharts/MSColumn2D.swf", "myChartId",
"900", "300", "0", "0");

u ="target.action?a=all&b=b";
u=u+"&c="+"c"+"&d="+"d";
myChart.setDataURL(u);
myChart.render("chartdiv");
在服务器端只能获得到a=all,其他的参数,b,c,d都获得不了,为什么?

A1.
FusionChart V3的方法chart.setDataURL(url)对特殊字符敏感,比如:?,&,还有日期格式中包含减号:2009-12-02,导致不能正常传递,而且没有任何的错误提示。只是说加载数据错误(ERROR LOADING DATA)。

解决办法:对url进行处理——

1。在JS下,可以用escape方法来转换。chart.setDataURL(escape(url)).

2。在服务器端处理,如果你想在服务器端就进行编码,那就使用你的编程语言提供的URL编码方法。如在java里进行编码的函数是 java.net.URLEncoder.encode()。

另外:FusionChart对于时间的:(冒号,如 2010-02-24 23:59:59)不能转换,当时一直没有找到问题。没有报错或者报时间应该在-4444到9999之间。之前一直以为是空格的问题,后来才发现是冒号的问题!

办法:1,在js下,将":"号替换成"_"。比如说变量为starttime,starttime.replace(/:/g,"_");这表示替换全部的":";在服务器端可以再转过去。

[例子如下:

javascript字符串替换所有要替换字符
javascript替换函数使用正则表达式

//将字母i全部替换成5

<script language="javascript">
var txt = "sjfisjfisdjfijsidfjioalfjewofjjgs";
alert(txt .replace(/i/g,"5"));
</script>

 

//只将第一个字母i替换成5

<script language="javascript">
var txt = "sjfisjfisdjfijsidfjioalfjewofjjgs";
alert(txt .replace("i","5"));
</script>

]

2。在java下,将“_”号替换成“:”。starttime.replaceAll("_",":");当然不替换也是可以的。看你数据库的日期格式是怎么样的了。

Q2。中文显示问题。在要显示图的页面引入js:

Report.jsp
 

<script language="javascript"
src="<%=request.getContextPath()%>/FusionCharts/FusionCharts.js"></script>

.....
 

<body>

<button onclick="newChart();" style="background-color: red">test</button>
<div id="chartdiv" >
</div>
 

</body>

.....

//显示柱状图
function newChart(){
var phone =document.getElementById("PHONE").value;
if(phone.trim().length==11){
phone = phone.trim();
var starttime = document.getElementById("STARTTIME").value;
var endtime = document.getElementById("ENDTIME").value;
var chart = new FusionCharts("<%=request.getContextPath()%>/FusionCharts/FCF_Column3D.swf","ItemCharts","1000","500");//将swf文件拷贝到FusionCharts下
//不能处理:号...
starttime = starttime.replace(/:/g,"_");
endtime = endtime.replace(/:/g,"_");
var url = "behaviorchart.jsp?phone="+phone+"&starttime="+starttime+"&endtime="+endtime;
//alert(url);
chart.setDataURL(escape(url));
chart.render("chartdiv");
}else{
Dialog.alert("柱状图只能显示一个号码的数据!请输入确切的号码!");
}
}

behaviorchart.jsp:

<%@page pageEncoding="gbk"%>
<%@page import="com.skyarm.mwc.dao.*"%>
<%@page import="com.skyarm.mwc.pojo.*"%>
<%@page import="com.skyarm.mwc.util.*"%>
<%@page import="java.util.*"%>
<%
out.clear();
//参数
String phone = request.getParameter("phone");
String starttime = request.getParameter("starttime");
String endtime = request.getParameter("endtime");
//换过来成:号
starttime=starttime.replaceAll("_",":");
endtime=endtime.replaceAll("_",":");
StringBuffer sb = new StringBuffer();
。。。

拼接成xml的文档。

out.println(sb.toString());
out.flush();
%>


 

A2。xml返回的有中文的话不能显示,都显示为乱码。将behaviorchart.jsp的pageEncoding设置为gbk,页面的属性也设置为GBK就可以正确的显示了。

Q3。拼成的xml文档中有:

<graph caption='..' ... yAxisName=‘点击次数’ ... >

<set name='..' value='...' ..../>

....
 

</graph>

结果y轴的名称不显示出来。。。

A3。这个问题比较简单了,我用的Free版的,被限制了。付费了就不会出现问题的!

------分隔线----------------------------
标签(Tag):Java JAVA实例教程 JAVA基础教程 Java源代码 Java技巧
------分隔线----------------------------
推荐内容
猜你感兴趣