使用funshionchart技术总结


在最近的项目中,有个下功能要开发报表,开始使用了项目中已有的图表框架jfreechart,发现生成图片,然后建立链接,图片不好看,且页面显示效率低。

后来使用了funshionchart,主要是配置xml,用户体验好,效率也高多了。


后台主要是获取统计数据,组装成相应格式,递给前台,之前北京组的同事使用dom.jar生成xml文件,并组装数据,然后前台获取这个xml文件,这对开发人员的技术和时间要求都变得高了,也不利于解决问题。

 我是通过把生成图表的xml拼成字符串,然后直接给前台页面。

图表的xml在官方包中有很多,有各种风格,只需把官方例子中的xml拿出来,把里面的静态数据修改成动态加载数据,生成xml即可。

后台代码对数据进统计:


/**
* 显示系统概览
* @param mapping
* @param form
* @param request
* @param response
* @return  Notice
* @throws Exception
*/

public void showSysOverview(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {


StringBuffer xmlsb = new StringBuffer();
Map condition = new HashMap();
condition.put("maxresult", Integer.valueOf(10));
String defaultnum = request.getParameter("num");
String[] rowKeys = { "总数", "已完成", "待处理" };
StringBuffer allsb = new StringBuffer();
StringBuffer systemnamesb = new StringBuffer();
StringBuffer donesb = new StringBuffer();
StringBuffer undosb = new StringBuffer();
int rowkeylen = rowKeys.length;


List list = mgr.getUsersScoreList(ItsspWelcomeMethod.SYSTEMDEPT_SQL,
condition);
condition.put("maxresult", Integer.valueOf(100000));
int size = list.size();
int[] allproblem = new int[size];
String[] columnKeys = new String[size];
for (int j = 0; j < rowkeylen; j++) {
for (int i = 0; i < size; i++) {
Object[] objs = (Object[]) list.get(i);
String deptid = ItsspWelcomeMethod.getStrNotNull(objs[0]);
String deptname = ItsspWelcomeMethod.getStrNotNull(objs[1]);
columnKeys[i] = deptname;
int all = 0;
// 存放已解决问题
int done = 0;
// 存放未解决问题
int undone = 0;
if (j == 0) {
all = method.getDataSize(deptid, "");
allproblem[i] = all;
allsb.append("<set value=" + '"').append(all).append(
'"' + "/>");
systemnamesb.append("<category label=" + '"').append(
deptname).append('"' + "/>");
} else if (j == 1) {
done = method.getDataSize(deptid, " and p.problemType!=0");
donesb.append("<set value=" + '"').append(done).append(
'"' + "/>");
} else if (j == 2) {
undone = method.getDataSize(deptid, " and p.problemType=0");
undosb.append("<set value=" + '"').append(undone).append(
'"' + "/>");
}

if ("3".equals(defaultnum) && (i==3)) {
break;
}
}
}
Arrays.sort(allproblem);
int bound = allproblem[size - 1] + 1; // 总高,刻度为bound/5
xmlsb.append(
"<chart yAxisMaxValue=" + '"' + bound + '"' 
+ " staggerLines=" + '"' + 5 + '"' + " showValues=" + '"' + "1" + '"'
+ " baseFontSize=" + '"' + "13" + '"'
+ " divLineAlpha=" + '"' + "20" + '"'
+ " divLineColor=" + '"' + "64810A" + '"'
+ " divLineIsDashed=" + '"' + "1" + '"'
+ " showAlternateHGridColor=" + '"' + "1" + '"'
+ " alternateHGridAlpha=" + '"' + "5" + '"'
+ " alternateHGridColor=" + '"' + "CC3300" + '"'
+ " shadowAlpha=" + '"' + "40" + '"' + " labelStep="+ '"' + "1" + '"' 
       + " numvdivlines=" + '"' + "5" + '"'
+ " chartRightMargin=" + '"' + "35" + '"' + " bgColor="
+ '"' + "FFFFFF,CC3300" + '"' + " bgAngle=" + '"'
+ "270" + '"' + " bgAlpha=" + '"' + "10,10" + '"'
+ " >")
. append("<categories font='Arial'>").append(systemnamesb)
.append("</categories>").append(
"<dataset seriesName=" + '"' + rowKeys[0] + '"'
+ " color=" + '"' + "AFD8F8" + '"'
// + " anchorBorderColor=" + '"' + "1D8BD1" + '"'
// + " anchorBgColor=" + '"' + "1D8BD1" + '"'
+ ">").append(allsb).append("</dataset>")
.append(
"<dataset seriesName=" + '"' + rowKeys[1] + '"'
+ " color=" + '"' + "F6BD0F" + '"'
// + " anchorBorderColor=" + '"' + "F1683C" + '"'
// + " anchorBgColor=" + '"' + "F1683C" + '"'
+ ">").append(donesb).append("</dataset>")
.append(
"<dataset seriesName=" + '"' + rowKeys[2] + '"'
+ " color=" + '"' + "8BBA00" + '"'
// + " anchorBorderColor=" + '"' + "F1683C" + '"'
// + " anchorBgColor=" + '"' + "F1683C" + '"'
+ ">").append(undosb).append("</dataset>")
.append("</chart>");
response.setCharacterEncoding("UTF-8");
response.getWriter().print(xmlsb.toString());
}



前台代码只需setDataXML,在要展示的div中,请求action,获取后台数据,得到后set数据渲染到div即可

前台代码:
<div id="sysOverview" class="proble_list con_8px">
<script type="text/javascript">

Ext.onReady(function(){

Ext.Ajax.request(
{
url:'/itssp/welcomemgr/welcome.do?method=showSysOverview&num=3',
method: 'post',
success: function(response){
var dataxml = response.responseText;
       var myChart = new FusionCharts("./scripts/fusionCharts/swf/MSColumn3D.swf", "ChartId", "445", "234", "0", "0");
    myChart.setDataXML(dataxml);   
    myChart.render("sysOverview"); 
}
});
});
   
</script>

</div>

效果图:






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值