ECharts 初探

关于ECharts的内容请浏览http://echarts.baidu.com/echarts2/doc/about.html

本例主要讲解和演示基于Spring MVC + ECharts 的Demo。

第一步:下载ECharts,下载地址

本例使用的类型为:

ECharts:echarts.min.js

JQuery:jquery-1.11.1.min.js

Spring:spring 4.3.10.RELEASE

第二步:环境搭建,请参考:Spring MVC环境搭建与基本操作

2.1 在WEB-INF下创建存放静态资源的文件夹static

具体目录结构为:

/WEB-INF/static/images

/WEB-INF/static/css

/WEB-INF/static/js

将所需要的js文件放置在/WEB-INF/static/js目录下。

2.2 修改xxxx-servlet.xml,增加如下配置。

<!-- 设置使用注解的类所在的jar包 -->
	<context:component-scan base-package="com.mahaochen.paralegal" />
	<bean
		class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
		<property name="messageConverters">
			<list>
				<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
			</list>
		</property>
	</bean>
	
	<!-- 在Spring配置文件中配置ViewResolver -->
	<!-- ViewResolver -->
	<!-- 
	InternalResourceViewResolver:用于支持Servlet、JSP视图解析;
    viewClass:JstlView表示JSP模板页面需要使用JSTL标签库,classpath中必须包含jstl的相关jar包;
    prefix和suffix:查找视图页面的前缀和后缀(前缀[逻辑视图名]后缀),比如传进来的逻辑视图名为hello,则该该jsp视图页面应该存放在“WEB-INF/jsp/hello.jsp”;
	-->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean>
	 
	<!-- SpringMVC设置不拦截静态资源css、js、images -->
	<mvc:annotation-driven />
	<mvc:resources location="/WEB-INF/static/images/" mapping="/images/**"/> 
	<mvc:resources location="/WEB-INF/static/css/" mapping="/css/**"/> 
	<mvc:resources location="/WEB-INF/static/js/" mapping="/js/**"/>

2.3 在WEB-INF/jsp/创建echarts.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="/Paralegal/js/echarts.min.js"></script>
<script type="text/javascript" src="/Paralegal/js/jquery-1.11.1.min.js"></script>
<title>ECharts 测试页面</title>
</head>
<body>
<h2>Login</h2>
<div id="main" style="width:100%; height:400px;"></div>
<button id="button" onclick="loadDatas()">按钮</button>
</body>
<script type="text/javascript">
		function loadDatas() {
			var myChart = echarts.init(document.getElementById('main'));
			// 显示标题,图例和空的坐标轴
			myChart.setOption({
				title : {
					text : '异步数据加载示例'
				},
				tooltip : {},
				legend : {
					data : [ '发布排行' ]
				},
				xAxis : {
					data : []
				},
				yAxis : {
					splitLine : {
						show : false
					},//去除网格线
					name : ''
				},
				series : [ {
					barWidth : "30px",
					name : '发布排行',
					type : 'bar',
					itemStyle : {
						normal : {
							label : {
								show : true,
								position : 'top',
								textStyle : {
									color : '#333'
								}
							}
						}
					},
					data : []
				} ]
			});
			myChart.showLoading(); //数据加载完之前先显示一段简单的loading动画
			var names = []; //类别数组(实际用来盛放X轴坐标值)
			var nums = []; //销量数组(实际用来盛放Y坐标值)
			$.ajax({
				contentType : "application/json",
				type : 'get',
				cache: false,
				url : '/Paralegal/echarts/getDatas',//请求数据的地址
				dataType : "json", //返回数据形式为json
				success : function(result) {
					//请求成功时执行该函数内容,result即为服务器返回的json对象
					$.each(result.list, function(index, item) {
						names.push(item.depname); //挨个取出类别并填入类别数组                    
						nums.push(item.num); //挨个取出销量并填入销量数组
					});
					myChart.hideLoading(); //隐藏加载动画
					myChart.setOption({ //加载数据图表
						xAxis : {
							data : names
						},
						series : [ {
							// 根据名字对应到相应的系列
							name : '发布排行', //显示在上部的标题
							data : nums
						} ]
					});
				},
				error : function(errorMsg) {
					//请求失败时执行该函数
					alert("页面请求数据失败!");
					myChart.hideLoading();
				}
			});
		};
		loadDatas();
	</script>
</html>

2.3 编写EChartsController

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/echarts")
public class EChartsController {

	@RequestMapping("/test")
	private String index(){
		return "echarts";
	}
	
	@RequestMapping("/getDatas")
	@ResponseBody
	private Map<String, List<Map<String, Object>>> getDatas() {

		 Map<String, List<Map<String, Object>>> map = new HashMap<String, List<Map<String,Object>>>();
		 
		 List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
		 for(int i=0;i<5;i++){
			 Map<String, Object> itmMap = new HashMap<String, Object>();
			 itmMap.put("depname", "dep"+i);
			 itmMap.put("num", new Random().nextInt(1000) );
			 list.add(itmMap);
		 }
		 map.put("list", list);
		 System.out.println(map);
		return map;
	}
	
	
}

第三步:效果演示。



注意事项:

GET访问浏览器认为是等幂的。即一个相同的URL 只有一个结果[相同是指 整个URL字符串完全匹配]
所以 第二次访问的时候 如果 URL字符串没变化 浏览器是 直接拿出了第一次访问的结果
POST则认为是一个 变动性 访问 (浏览器 认为 POST的提交 必定是 有改变的)
防止 GET 的 等幂 访问 就在URL后面加上 ?+new Date();,[总之就是使每次访问的URL字符串不一样的]

设计WEB页面的时候 也应该遵守这个原则。

可以通过修改

type : 'get',
cache: false,

type : 'get',
来测试验证。

猜你喜欢

转载自blog.csdn.net/ma_hoking/article/details/80324182
今日推荐