jsp页面整合ECharts绘制图表(以折线图为例)

2023-11-03

jsp页面整合ECharts绘制折线图

官网: https://echarts.apache.org/zh/index.html

官网上有demo可以直接调试样式。

话不多说, 直接上代码, 因为好久没写过jsp页面, 语法、用法啥的可能都比较糙, 主要参考整合ECharts的js代码部分, 我是为了方便调试, js直接放在了jsp页面中。

先看效果图

这个是下面 interval: 1 时的显示样式, x轴数据太多的话可以跳几个, 不全显示, 但是折线上会显示数据;

如果不需要跳, 不写或者写0。

前端代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" isELIgnored="false" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html style="overflow:scroll">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script type="text/javascript" src="${pageContext.request.contextPath}/app-resource/js/common/echarts.min.js"></script>
    <script type="text/javascript" src="${pageContext.request.contextPath}/app-resource/js/common/jquery-3.3.1.min.js"></script>
    <title>坐席监控报表</title>
    <style type="text/css">
      
    </style>
</head>
<body>
<div>
    <h4>坐席监控报表</h4>
</div>
<div class="panel panel-default forie8"
     style="width: 100%; margin-bottom: 0px;">
    <div class="panel-body" style="padding-bottom: 0px;padding-top:10px">
        <form class="form-inline">
            <div class="form-group forie8" style="height: 50px;margin-left:28px">
                <%--这里是一些查询条件省略了, 主要看下面折线图部分--%>
            </div>
            <br>
        </form>
    </div>
</div>

<%--折线图--%>
<div id="main" class="col-md-12" style="width: 1200px; height: 500px; margin-top: 10px"></div>

<script type="text/javascript">
    // 注掉的部分是简单的理解和静态demo, 后面没注掉的部分是从后端动态获取数据展示
    // // 我的理解是(不一定对): 下面myChart、option相当于一个类以及属性;  下面myChart.setOption(option); 则是创建了一个实例对象使用
    // var myChart = echarts.init(document.getElementById('main'));
    // var option = {
    //     title: {
    //         text: '坐席数',
    //     },
    //     tooltip: {
    //         // 折线图上: 鼠标移动到每个点都会显示文本数据
    //         trigger: 'axis'
    //     },
    //     legend: {
    //         data: ['登录坐席数', '外呼坐席数']
    //     },
    //     // 工具栏: 可以转换为柱状图等等
    //     /*toolbox: {
    //         show: true,
    //         feature: {
    //             dataZoom: {},
    //             dataView: {readOnly: false},
    //             magicType: {type: ['line', 'bar']},
    //             restore: {},
    //             saveAsImage: {}
    //         }
    //     },*/
    //     xAxis: {
    //         // type: 'category',
    //         // x轴坐标从0开始显示
    //         boundaryGap: false,
    //         axisLabel: {
    //             // x轴坐标中间隔一个显示, 0则不隔, 下例则X轴只显示09、11、13点, 但是折线图上数据也会显示5个点的数据
    //             interval: 1,
    // 			  // x 轴太长显示不下时, 可以斜着显示 
    //             rotate: 40 
    //         },
    //         data: ['09:00', '10:00', '11:00', '12:00', '13:00']
    //     },
    //     yAxis: {},
    //     series: [
    //         {
    //             name: '登录坐席数',
    //             type: 'line',
    //             data: [1, 2, 3, 4, 5]
    //         },
    //         {
    //             name: '外呼坐席数',
    //             type: 'line',
    //             data: [4, 5, 2, 4, 9]
    //         }
    //     ]
    // };
    // 使用刚指定的配置项和数据显示图表
    // myChart.setOption(option);

    
    var contextPath = "${pageContext.request.contextPath}";

    // 下面是实际使用 queryData()方法调用时就可以显示折线图了
    function queryData(timeType, startTime) {
        $.ajax({
            type: "post",
            url: contextPath + "/report/agentMonitor/getAgentMonitorData",
            data: {'timeType': timeType},
            dataType: 'json',
            success: function (data) {
                //alert(JSON.stringify(data));
                var xData = data.xData;
                console.log("xData: " + xData);
                var yDataLogin = data.yDataLogin;
                console.log("yDataLogin: " + yDataLogin);
                var yDataOut = data.yDataOut;
                console.log("yDataOut: " + yDataOut);
                // 每次请求都重新搞一次
                var myChart = echarts.init(document.getElementById('main'));
                var option = {
                    title: {
                        text: '坐席数',
                    },
                    tooltip: {
                        // 折线图上: 鼠标移动到每个点都会显示文本数据
                        trigger: 'axis'
                    },
                    legend: {
                        data: ['登录坐席数', '外呼坐席数']
                    },
                    xAxis: {
                        // type: 'category',
                        // x轴坐标从0开始显示
                        boundaryGap: false,
                        axisLabel: {
                            // x轴坐标中间隔一个显示, 0则不隔
                            interval: timeType === "3" ? 1 : 0
                        },
                        // 后端返回的横坐标
                        data: xData,
                    },
                    yAxis: {},
                    series: [
                        {
                            name: '登录坐席数',
                            type: 'line',
                            // 后端返回的数据
                            data: yDataLogin
                        },
                        {
                            name: '外呼坐席数',
                            type: 'line',
                            data: yDataOut
                        }
                    ]
                };
                // 展示
                myChart.setOption(option);
                // 下面这个应该是清除原数据吧...
                window.onresize = function () {
                    myChart.resize();
                };
            },
            error: function (data) {
                //alert(data.status);
                 alert("error");
            }
        });
    }
</script>
</body>
</html>

后端测试代码

@ResponseBody
@RequestMapping("getAgentMonitorData")
public AgentMonitorPo getAgentMonitorData(String timeType, HttpServletRequest request, HttpServletResponse response) {
    AgentMonitorPo po = new AgentMonitorPo();
    if ("3".equals(timeType)) {
        po.setxData(new String[]{"10:00", "11:00", "12:00", "13:00", "14:00"});
        po.setyDataLogin(new int[]{8, 4, 7, 3, 6});
        po.setyDataOut(new int[]{5, 2, 6, 1, 4});
    } else {
        po.setxData(new String[]{"03-07", "03-08", "03-09", "03-10", "03-11"});
        po.setyDataLogin(new int[]{80, 40, 70, 30, 60});
        po.setyDataOut(new int[]{5, 20, 60, 10, 40});
    }
    return po;
}

public class AgentMonitorPo {

    // 折线图x轴坐标显示跨度
    private int myInterval;
    // x轴坐标显示
    private String[] xData;
    // y轴数据: 坐席登录数
    private int[] yDataLogin;
    // y轴数据: 坐席外呼数
    private int[] yDataOut;
    // 异常信息
    private String errMsg;
    
    ....省略get、set方法
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jsp页面整合ECharts绘制图表(以折线图为例) 的相关文章

  • 如何使用 php 发送服务器错误响应?

    一旦用户点击删除按钮我的 jQuery 脚本要求服务器删除所选项目 现在我想要我的php发送成功或错误响应的脚本 是否有可能触发错误回调万一该项目无法删除 Thanks 我的 jQuery 代码 ajax type post url myA
  • 如何在同一页面上使用AJAX处理多个表单

    我有一个表单 当我单击 提交 时 它就被提交了 然后该表单隐藏 操作页面的结果显示在 div 中 classname dig 它工作正常 但是当我添加另一个表单时 它停止正常工作并且所有表单同时提交 我如何更改我的代码 done click
  • jQuery UI 对话框 + 验证

    我在单击 保存 后使用 Jquery Validate 验证 jQuery UI 对话框时遇到问题 这是我创建 Jquery 对话框的代码 它从目标 href URL 加载对话框 document ready dialogForms fun
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • 处理长时间运行的报告

    我正在开发一个用 C 和 Sql Server 2000 数据库编写的 ASP net 应用程序 我们有多个 PDF 报告供客户用于满足其业务需求 问题是这些报告需要一段时间才能生成 gt 3 分钟 通常最终发生的情况是 当用户请求报告时
  • PHP表单提交后如何显示成功消息?

    这是代码 我想要这样 表单提交 gt page2 php gt 重定向 gt page1 php 这是消息 弹出窗口或其他内容 page1 php
  • 当我使用 EF(和 WebAPI)向数据上下文发送高频请求时出现奇怪的竞争条件

    在我的 WebAPI 控制器中我有这个 HttpDelete public HttpResponseMessage DeleteFolder int id service DeleteFolder id return Request Cre
  • 将两个 laravel AJAX 函数合并到一条路径中

    我正在尝试将数据插入数据库 并且我的两个功能都可以工作 但是当我尝试缩短它并放入一些常见内容时 它就无法工作 我认为问题出在我的第一个函数中 我正在使用图像 并且对于该 contentType 所有细节都不同 这就是它不起作用的原因 这是我
  • 加载部分模板 Ajax - 使用 Grails

    我正在创建一个 grails web 应用程序 并且有主索引 gsp 并且有几个通用组件 这些组件在我使用部分模板的网站上的大多数页面中都是通用的 每个部分模板都将是非常独立的 并且包含非常不同的信息 因此每个部分模板都应该从不同的控制器获
  • Laravel csrf 令牌与 ajax POST 请求不匹配

    我正在尝试通过ajax从数据库中删除数据 HTML foreach a as lis some code a href class delteadd Delete a click action perform on this link en
  • 如何修改 PHP/Jquery/Ajax 脚本以拥有多个表单字段

    我有一个 php Ajax Jquery 脚本 它将表单字段插入 MySQL 并更新页面 当您点击提交时无需刷新 我希望脚本提交四个表单字段 而不是仅一个 我已经更新了数据库表add delete record还有 3 个附加字段 余额 帐
  • Ajax GET 请求:使用参数还是将数据放入 URL?

    在 Ajax GET 请求中将数据作为参数传递与作为 URL 的一部分传递相比有何优势 使用参数 var ajax new Ajax Request server php parameters store 11200 product Mea
  • 如何格式化 Microsoft JSON 日期?

    我正在第一次尝试Ajax http en wikipedia org wiki Ajax 28programming 29使用 jQuery 我正在将数据传输到页面上 但在处理为日期数据类型返回的 JSON 数据时遇到了一些问题 基本上 我
  • 大量使用 AJAX 的页面也能被搜索引擎友好吗?

    我想我的意思是 如果我创建一个使用 AJAX 加载一些我也希望搜索引擎找到的内容的网站 如果我使页面工作无 javascript 例如 当 javascript 不存在时 链接去site com c somecontent而不是调用函数 c
  • 如何将画布转换为图像以上传到烧瓶?

    好吧 我正在尝试将调整大小的画布图像作为文件上传到 Flask 首先我尝试使用canvas toDataURL 将其转换为 base64 字符串 然后尝试使用以下命令将其作为图像上传formdata使用AJAX 就没那么幸运了 然后我尝试使
  • jQuery Ajax 返回 404 错误,但响应正确

    我通过 jQuery AJAX 将一些数据发布到 PHP 脚本 一切都正确执行 但它返回 404 错误 在我的 Firebug 控制台中 PHP 脚本的响应是正确的 我不明白脚本如何响应 它仍然抛出 404 错误 jQuery 错误 回调方
  • 通过 XMLHttpRequest 将数据从 JavaScript 发送到 PHP

    再会 我正在尝试将一段简单的数据从一个 php 文件 manage php 发送到另一个 view php 我无法通过表单发送数据 我想通过 JS 脚本发送数据 这是我的尝试 var read function id xmlhttp new
  • 如何在同一视图中渲染两个分页且可 ajax 的集合?

    在 Rails 3 2 索引视图中 我正在渲染两个部分 并且在部分 Show some fields 分页不起作用 如果我改变will paginate要获取实例变量 分页可以工作 但是集合错误 当调用部分时 如何将
  • 如何使用ckeditore通过ajax发送数据?

    我在 django 中有一个表格 这是 撰写邮件 形式 我将此表单从视图发送到我的模板 然后应用 ckeditor 来更改正文样式 我希望通过 ajax 发布此表单 当使用 ckeditor 时 body 字段的值不会随 request P

随机推荐

  • TCP/IP学习笔记-PPPoE协议

    写在前面 仅供学习使用 PPPoE协议概述 PPPoE是一种把PPP帧封装到以太网帧的链路层协议 所以抓包的时候抓的是以太网协议 PPPoE利用以太网将大量主机组网 不仅具有以太网快速简便的特点还有PPP强大的功能 任何能被PPP封装的协议
  • OLED拼接屏生产流程全解析:关键步骤、注意事项和技术趋势

    OLED拼接屏作为现代商业展示 会议室和指导系统中的重要组成部分 其高亮度 高对比度和逼真的色彩效果备受推崇 然而 要实现一块完美无缝的OLED拼接屏并非易事 本文将深入探讨OLED拼接屏的生产过程 包括关键步骤 注意事项以及当前的技术趋势
  • Spring Cloud Gateway 远程代码执行漏洞(CVE-2022-22947)

    一 漏洞描述 Spring Cloud Gateway 是基于 Spring Framework 和 Spring Boot 构建的网关 它旨在为微服务架构提供一种简单 有效 统一的 API 路由管理方式 3月1日 VMware发布安全公告
  • Linux三剑客(grep、sed、awk)

    Linux三剑客指的是grep sed awk 其中grep擅长查找功能 sed擅长取行和替换 awk擅长取列 一 grep grep作用是筛选 查询 文本搜索工具 根据用户指定的 模式 pattern 对目标文本进行过滤 显示被模式匹配到
  • bp神经网络算法matlab程序,bp神经网络的matlab实现

    MATLAB中BP神经网络的训练算法具体是怎么样的 先用newff函数建立网络 再用train函数训练即可 1 正向传播 输入样本 gt 输入层 gt 各隐层 处理 gt 输出层注1 若输出层实际输出与期望输出 教师信号 不符 则转入2 误
  • MATLAB批量重命名存储数据

    目录 文件查找 文件移动和改名 所调用函数功能 文件查找 首先确定数据存储的文件夹地址 记为folder dir 如果该文件夹不存在需要访问的子文件夹 则直接复制文件地址 如果存在需要访问的子文件夹 则要利用dir函数进行寻找 将子文件夹信
  • Content-Type

    要学习content type 必须事先知道它到底是什么 是干什么用的 HTTP协议 RFC2616 采用了请求 响应模型 客户端向服务器发送一个请求 请求头包含请求的方法 URI 协议版本 以及包含请求修饰符 客户 信息和内容的类似于MI
  • SQL综合案例之电商漏斗转化分析,pv,uv及

    漏斗模型示例 不同的业务场景有不同的业务路径 有先后顺序 事件可以出现多次 注册转化漏斗 启动APP gt APP注册页面 gt 注册结果 gt 提交订单 gt 支付成功 搜购转化漏斗 搜索商品 gt 点击商品 gt 加入购物车 gt 提交
  • 什么是UTXO

    比特币UTXO是比特币网络中的一个重要概念 它是比特币交易的基础 也是比特币的账户系统 本文将从UTXO的定义 使用方式 优点和缺点等多个方面详细介绍比特币UTXO 一 UTXO的定义 UTXO Unspent Transaction Ou
  • 超详细用profile工具分析sql语句执行及status说明

    超详细用profile工具分析sql语句执行及status说明 介绍 sql执行慢的原因有可能很多种 怎么定位呢 可以用Query Profile人工具 通过该工具可以获取一条Query 在整个执行过程中多种资源的消耗情况 如 CPU IO
  • 如何防止服务器数据轻易泄露

    如今 对于中小企业和个人用户来说 在考虑到服务器的性能与安全成本的基础上 应该如何保护自己的服务器数据呢 1 提高服务器的容错能力 容错能力指的是 当服务器出现磁盘阵列错误 发现其中一组数据出错 服务器可以自动通过其他磁盘来纠正错误 恢复到
  • deep learning编程作业总结3---一步步搭建多层神经网络及应用

    本周的主要学习了如何搭建一个多层神经网络 涉及较多的理论知识 因此本编博客将对自己所学的有关神经的知识做一个总结 图1展示的是具有4个隐藏层的神经网络结构 它的输入由x1 x2 x3构成 表示样本X具有三个特征 随后进入第一个隐藏层 该层分
  • python财务报表预测股票价格_建模股票价格数据并进行预测(统计信号模型):随机信号AR模型+Yule-Walker方程_Python...

    1 背景 针对股票市场中AR 模型的识别 建立和估计问题 利用AR 模型算法对股票价格进行预测 2 模型选取 股票的价格可视为随机信号 将此随机信号建模为 一个白噪声通过LTI系统的输出 通过原始数据求解 所建模型参数 得到模型 即可预测近
  • 华为od业务主管面试问题-我的回答

    目录 1 怎么处理项目上的需求 2 业余会不会学什么东西 3 你对加班的看法 4 你对OD的看法 5 哪里人 6 后续的发展 7 你对华为的认识 对当前岗位的了解 1 怎么处理项目上的需求 gt 项目经理和产品经理进行需求对接 gt 项目经
  • vant-list + toast分页加载,数据加载后会滚动至顶部

    vant list toast分页加载 数据加载后会滚动至顶部 主要原因是 toast组件在全局添加了 pointer event none 解决办法 在对应的van list的属性值添加 pointer event volunteer l
  • QT控件之(TableView)的居中效果

    T将tableView中的表头以及文本内容都进行居中处理 1 需要在构造函数中增加一句 以下增加的是表头的效果 ui gt tableView gt horizontalHeader gt setSectionResizeMode QHea
  • SQL注入之布尔盲注

    布尔盲注 如果确定页面注入点存在 如果页面没有回显并且没有报错信息可以考虑使用布尔盲注 布尔盲注的判断条件是页面布尔类型状态 当传递参数 id 1 and 1 1 这里以sqlilab的闯关为例 当传递参数 id 1 and 1 2 比较两
  • MyBatis学习(三):解析MyBatis的SQL映射XML文件写法和使用原理

    上面的两篇文章 分别是MyBatis的入门小程序和MyBatis的配置XML解析 有需要的可以先去看看这两篇文章 本篇文章 会来讲解SQL映射XML文件的写法以及如何使用 MyBatis真正的力量在于其映射语句 这里应该是奇迹发生的地方 S
  • Vue传参出现 Required String parameter 'username' is not present

    场景描述 在 使用axios 发送HTTP请求时 传递了后端指定的请求参数 但是后端报错 描述信息为 Required String parameter username is not present 分析问题 开始找原因 确定前端传递的参
  • jsp页面整合ECharts绘制图表(以折线图为例)

    文章目录 jsp页面整合ECharts绘制折线图 先看效果图 前端代码 后端测试代码 jsp页面整合ECharts绘制折线图 官网 https echarts apache org zh index html 官网上有demo可以直接调试样