登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

每天进步一点点

那年我们一起追求的梦想。

 
 
 
 
 

日志

 
 

使用FusionCharts时出现的问题  

2010-02-24 21:46:38|  分类: Java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
不Q1.最近在用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版的,被限制了。付费了就不会出现问题的!

  评论这张
 
阅读(2826)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018