javaEE SSH框架使用ChartDirector绘图

最近做毕设想要在web端显示图表,网上有很多图表的插件,JFreeChart也不错,不过我选择的是ChartDirector。

一、需求:分页显示学生访问对应课程次数的柱状图,(之前我爬取了网站上的一些课程,并记录了用户访问的记录)

二、实现:

(1)ChartDirector自带一个jsp文件,复制到项目中,还有将ChartDirector.jar包引入项目中

(2)要显示图表的jsp界面,其中chart1URL和imageMap1是Action层处理好传递过来的数据,分页的代码可以忽略掉,其实真实的界面代码也就几行。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  	<%@include file="/WEB-INF/jsp/public/list.jspf" %>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>我的历史浏览记录</title>
  </head>

  <body>
  	<div align="center">
	<hr color="#000080">
	<img src='${pageContext.request.contextPath}/charts/getchart.jsp?${chart1URL}' usemap="#map1" border="0">
	<map name="map1">${imageMap1}</map>
	</div>
	<s:form name="student_visitRecord" method="post" >
	</s:form>
<!-- 分页 -->
	<div class="pageView" style="font-size:20px;">
页次:${currentPage}/${pageCount}  每页:${pageSize}条 
总记录条数:${recordCount} 
<a href="javascript: gotoPage(1)" title="首页" style="cursor: hand;">首页</a>
<s:iterator begin="%{beginPageIndex}" end="%{endPageIndex}" var="num">
	<s:if test="#num == currentPage">
		<%-- 当前页 --%>
		<span class="PageSelectorSelected">${num}</span>
	</s:if>
	<s:else>
		<%-- 非当前页 --%>
		<span class="PageSelectorNum" onClick="gotoPage(${num});">${num}</span>
	</s:else>
</s:iterator>
<a href="javascript: gotoPage(${pageCount})" title="尾页"
	style="cursor: hand;">尾页</a>
转到:
<select onchange="gotoPage(this.value)" id="_pn">
	<s:iterator begin="1" end="%{pageCount}" var="num">
		<option value="${num}">${num}</option>
	</s:iterator>
</select>
<script type="text/javascript">
	$("#_pn").val("${currentPage}");
</script>

<script type="text/javascript">
	function gotoPage( pageNum ){
		// window.location.href = "forum_show.action?id=${id}&pageNum=" + pageNum;

		$(document.forms[0]).append("<input type='hidden' name='pageNum' value='" + pageNum +"'>");
		document.forms[0].submit();
	}
</script>
</div>
  </body>
</html>

(3)Action层,一些注释已经标注上,乱码的问题设置默认文字c.setDefaultFonts("simsun.ttc"),分页查询的方法就不多说了,将得到chart1URL和imageMap1字符串返回给jsp界面

/** 浏览记录 */
	public String visitRecord() throws Exception{
		int i,recordCount=0;
		//取出学生
		Student stuFind=getCurrentUser().getStudent();
		//取出访问的课程
		String hql="FROM VisitCourseRecord WHERE student=?";
		List<Object> parameters=new ArrayList<Object>();
		parameters.add(stuFind);
		int s=parameters.size();
		PageBean pageBean=visitCourseRecordService.getPageBean(pageNum, 15, hql, parameters);

		List<VisitCourseRecord> courseList=pageBean.getRecordList();
		ActionContext.getContext().getValueStack().push(pageBean);

		//记录条数
		recordCount=courseList.size();
		//数据--显示访问记录数
		double[] count=new double[courseList.size()];
		for(i=0;i<recordCount;i++){
			count[i]=courseList.get(i).getCount();
		}
		//数据--要显示的标题
		String[] labels = new String[courseList.size()];
		for(i=0;i<recordCount;i++){
			labels[i]=courseList.get(i).getSpiderCourse().getName();
		}
		// 创建1000*800的chart
		XYChart c = new XYChart(1000, 800);
		c.setDefaultFonts("simsun.ttc");
		// 添加图形的标题 ---- 18pt 宋体
		c.addTitle("访问课程记录", "宋体", 18);
		// Set the plotarea at (60, 40) and of size 500 x 280 pixels. Use a vertical gradient color from
		// light blue (eeeeff) to deep blue (0000cc) as background. Set border and grid lines to white
		// (ffffff).
		c.setPlotArea(100, 40, 800, 300, c.linearGradientColor(100, 40, 60, 280, 0xeeeeff, 0x0000cc), -1,
		    0xffffff, 0xffffff);
		// Add a multi-color bar chart layer using the supplied data. Use soft lighting effect with light
		// direction from left.
		c.addBarLayer3(count).setBorderColor(Chart.Transparent, Chart.softLighting(Chart.Left));
		// 设置文字
		c.xAxis().setLabels(labels);
		//设置文字以及方向65度
		c.xAxis().setLabelStyle("宋体", 10).setFontAngle(65);
		// Draw the ticks between label positions (instead of at label positions)
		c.xAxis().setTickOffset(0.5);
		// Add a title to the y axis with 10pt Arial Bold font
		c.yAxis().setTitle("访问次数","宋体",12);
		// Set axis line width to 2 pixels
		c.xAxis().setWidth(2);
		c.yAxis().setWidth(2);
		// Output the chart
		String chart1URL = c.makeSession(ServletActionContext.getRequest(), "chart1");
		// Include tool tip for the chart
		String imageMap1 = c.getHTMLImageMap("", "", "title='{xLabel}: US$ {value}M'");

		ActionContext.getContext().put("chart1URL", chart1URL);
		ActionContext.getContext().put("imageMap1", imageMap1);
		return "visitRecord";
	}

(4)其他就是SSH框架的东西,这里就不说了

三、测试:

分页信息:

下面黄色的标识是ChartDirector本身带的,网上有破解的方法,版本的原因,这里不再给出。

四、总结

刚开始ChartDirector给的jsp显示图表的Demo都是写在jsp界面的java代码,一些准备数据的代码,就可以移到Action或其他处理的代码中,只需要提供img的src的url和map的值即可。还有中文乱码问题,也是在网上搜到一些解决方法,关于其中的设置还要不断使用熟悉。

时间: 2024-08-28 03:29:57

javaEE SSH框架使用ChartDirector绘图的相关文章

javaEE SSH框架 qq第三方登录及用户绑定

前几天刚申请好域名,下面实现网站的qq第三方登录的功能,javaEE的SSH框架.(一些细节问题没有处理,只是大体上实现) 一:首先说一下需求,第一次使用qq第三方登录的用户需要绑定已有的网站用户名,绑定成功后进入首页.以后再使用qq第三方登录就直接进入网站首页. 二:要想使用qq第三方首先需要申请应用(需要有自己的域名) (1)登录qq互联网站申请应用,http://connect.qq.com/ (2)创建应用 (3)创建好之后还是可以修改的,这里回调地址我用的是域名+back.jsp界面(

[JavaEE] SSH框架笔记_eclipse搭建SSH框架详解

SSH框架是最常用的框架之一,在搭建SSH框架的时候总有人遇到这样,那样的问题.下面我介绍一下SSH框架搭建的全过程. 第一步:准备工作. 下载好eclipse,Struts2,Spring,Hibernate. 1.eclipse:eclipse下载的时候建议下载JavaEE版的eclipse. 当然你也可以下载eclipse-SDK.(下载eclipse-SDK需要下载Web,Tomcat等plugins) 2.Struts2:http://struts.apache.org/downloa

javaEE SSH框架 qq第三方登录及用户绑定(java sdk版)

之前有位朋友用js sdk实现了 SSH框架下的qq第三方登录功能,但是我发现使用js sdk 有些无法克服的安全问题,所以我改用java sdk来实现这个功能! 如图,使用java sdk时,回调地址应设置为一个.action链接.(注意!修改回调地址的话,官方不会及时给你审核通过,有的人修改回调地址后一年 官方都没给他审核通过,这意味着[修改回调地址不如 要重新申请一个域名!重新申请一次网站接入]) 使用官方给定的Sdk4J.jar时 控制台会打印许多log信息,这严重影响项目的运行效率,所

JavaEE SSH框架整合(四) 日志处理Spring结合 log4j、slf4j [转]

1. 加入log4j和slf4j的jar包 2. web.xml: [html] view plaincopyprint? <context-param> <!--log4j配置地址 --> <param-name>log4jConfigLocation</param-name> <!-- <param-value>/WEB-INF/classes/log4j.properties</param-value> --> &l

[JavaEE] SSH框架搭建所需要的包

struts2commons-logging-1.0.4.jar 主要用于日志处理freemarker-2.3.8.jar 模板相关操作需要包ognl-2.6.11.jar ognl表达示所需包,xwork-2.0.7.jar xwork核心包struts2-core-2.0.14.jar struts2核心包struts2-spring-plugin-2.0.14.jar struts2整合spring所需要的包如果还需要整合其它框架或者插件,再导入其它的包 hibernateHibernat

JavaEE SSH框架整合(四) 日志处理Spring结合 log4j、slf4j

1. 加入log4j和slf4j的jar包 2. web.xml: <context-param> <!--log4j配置地址 --> <param-name>log4jConfigLocation</param-name> <!-- <param-value>/WEB-INF/classes/log4j.properties</param-value> --> <param-value>classpath:l

JavaEE SSH框架整合(二) struts2 加载本地dtd文件,action配置

1. 加载struts2的dtd文件,使struts.xml不用联网就能验证,并在eclipse中有提示 在src下创建struts.xml: <?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPE strutsPUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://strut

javaEE SSH框架 BaseAction的抽取以及其他方面代码优化

有关之前实体类的设计参考我前面的博客:http://blog.csdn.net/u013082989/article/details/50983650 项目文件已经放到Github上,欢迎大家Follow,star.地址:https://github.com/lawlite19/SmartEducation 一:抽取BaseAction (1)先说一下ModelDriven的使用,比如用户登录,我想得到界面输入的用户账号userNum和用户密码password,可以在Action类中声明并实现g

JavaEE SSH框架整合(一) jar包导入 web.xml配置

最近买了一个阿里的云服务器.服务端是linux命令行环境,tomcat.mysql啥的都整好了. 就想自己写个web后台,制造一些网络数据啥的,给我的移动app-demo访问玩. 虽然以前学过web相关内容,但已经离开它三年多了,忘光光了. 特在此记录下学习.开发的一些流程,遇到的一些问题,和一些解决的方法. 1. 去struts官网下载了最新的完整zip.struts2.3.20 2. 在网络上下载了spring-framework3.2.8的完整zip.(官方最新4.x需要jdk1.8,我本