AmCahrt动态刷新数据

本人在使用Extjs时,用到AmChart(flash版本)来作图,开始做的时候我用ajax请求后,把结果替换 flashVars中的chart_data的数值,以为能够实现动态刷新的效果,可是界面没有任何改变,于是我使用重绘的方式实现了,但刷新的效果,界面总是一闪一闪的,不是很理想。后来我无意中发现了一种非常简单好用的方式,居然实现了。现分享出来。

首先,需要在ExtJS界面中创建一个flash模块,如下

    createFlashChart: function() {
        var me = this;
        me.flashchart = {
            id: 'flashchart',
            xtype: 'flash',
            stateful: true,
            url: 'resources/flashline.swf',
            EXPRESS_INSTALL_URL: 'resources/flash/expressInstall.swf',
            flashVars: {
                path: "resources/flash/",
                data_file: "chart/getRtValue.shtml",
                settings_file: "resourcesartsetartsetting.xml"
            },
            flashParams: {
                bgcolor: "#0000ff",
                wmode: "transparent",
                menu: "false"
            }
        }
    },

这里面包含一些swf文件,amline.swf是amchart中的直线模板,可以在文档中下载,expressInstall.swf可以在网上下载,path: "resources/flash/"设置的是amchart的模板库位置,data_file: "chart/getRtValue.shtml"设置的是我请求的数据URL,settings_file: "resources/ch artset/ch artsetting.xml" 设置的是图表样式文档。

然后,你需要在你的样式文档chartsetting.xml中设置如下内容,代表刷新频率

<reload_data_interval>3</reload_data_interval>
接着,你需要后台方法来获取数据,我这里使用的spring3MVC,返回的数据是xml文件,我先封装了一个转换map成xml的类,如下

package com.fly.util;

import java.util.List;
import java.util.Map;

/**
 * @作用 数据转换类
 * @author Fly
 */
public final class SystemUtil {

    public static String parseToXml(List<Map<String, Object>> mapList, String series, String[] graphs) {
        StringBuilder result = new StringBuilder("<?xml version='1.0' encoding='UTF-8'?><chart><series>");
        for (int i = 0; i < mapList.size(); i++) {
            Object o = mapList.get(i).get(series);
            result.append("<value xid='").append(i).append("'>").append(o).append("</value>");
        }
        result.append("</series><graphs>");
        for (int j = 0; j < graphs.length; j++) {
            result.append("<graph gid='").append(j).append("'>");
            for (int i = 0; i < mapList.size(); i++) {
                Object o = mapList.get(i).get(graphs[j]);
                result.append("<value xid='").append(i).append("'>").append(o).append("</value>");
            }
            result.append("</graph>");
        }
        result.append("</graphs></chart>");
        return result.toString();
    }

    public static List getRtMapList(List<Map<String, Object>> mapList, Map<String, Object> map) {
        if (mapList.size() > 100) {
            mapList.remove(0);
        }
        mapList.add(map);
        return mapList;
    }
}
这里面有两个函数,第一个函数是把map装换成xml的方法,它有三个参数,第一个是传递进来的map,第二个参数x轴的变量名,第三个是y轴的数据值。

第二个函数的意思就是当数据的长度大于100的时候,去掉第一个数据,重新加载进来一个数据。

有了这个类后,你就可以写controller类的方法了。如下

    @RequestMapping(value = "chart/getRtValue")
    @ResponseBody
    public String getRtValue(HttpSession session) {
        Test1 t1 = getTest1Info(session);
        int tp = t1.getTpId();
        Test1 t2 = getTest2Info(session);
        int rp = t2.getpId();
        if (chartValues == null) {
            long endtime = (new Date()).getTime() / 1000;
            long starttime = endtime - 48 * 3600;
            chartValues = chartService.getHisValue(tp, rp, starttime, endtime);
        }
        Map<String, Object> map = chartService.getRtValue(tp, rp);
        chartValues = SystemUtil.getRtMapList(chartValues, map);
        return SystemUtil.parseToXml(chartValues, "datatime", new String[]{"tp", "rp"});
    }
这个方法中的@RequestMapping(value = "chart/getRtValue") 的value就是extjs中flash模块data_file对应的地址。chartValues是一个储存数据数据的全局map类list,如果这个数据为空的话,我就取一段历史数据加载进来,如果不为空就直接加载当前最新值。chartService是我封装的获取数据的数据业务。你可以在这里面根据自己的需求封装数据,但最终需要利用SystemUtil.parseToXml方法,转换成xml类型数据。当然amchart还支持csv数据格式。


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值