JfreeChar结合struts2展示柱状图和饼状图(已解决乱码问题)

1.导入需要的jar包(下载见附件)

struts2-jfreechart-plugin-2.0.11.jar

jcommon-1.0.0.jar

jfreechart-1.0.14.jar

 

2.编写xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <package name="AnalysisAction" > 
    
	<result-types> 
  		<result-type name="chart" class="org.apache.struts2.dispatcher.ChartResult"/> 
	</result-types> 
		
	<action name="getGenderBar" method="getGenderBar" class="analysisAction"> 
	  <result name="success" type="chart"> 
	    <param name="chart">chart</param> 
	    <param name="height">300</param> 
	    <param name="width">480</param> 
	  </result> 
	</action> 
	
	<action name="getGenderPie" method="getGenderPie" class="analysisAction"> 
	  <result name="success" type="chart"> 
	    <param name="chart">chart</param> 
	    <param name="height">300</param> 
	    <param name="width">480</param> 
	  </result> 
	</action> 
	</package>
</struts>

* 注意开头部分result-type name="chart",status2的返回类型没有“char”类型,需要添加此返回类型。

 

3.编写生成图片的工具类BarChartUtil.java和status2的Acion

BarChartUtil.java

 

import java.awt.BasicStroke;
import com.rlzy.basic.AnalysisInfo;

public class BarChartUtil {

	public static CategoryDataset createBarDataset(List<AnalysisInfo> list,
			int type) {
		DefaultCategoryDataset localDefaultCategoryDataset = new DefaultCategoryDataset();
		String rowkey = "";
		String columnkey = "";
		for (AnalysisInfo analysisInfo : list) {
			columnkey = AnalysisTypeConstants.getTypeName(type, analysisInfo
					.getType());
			rowkey = columnkey;
			localDefaultCategoryDataset.addValue(analysisInfo.getCount(),
					rowkey, columnkey);
		}
		return localDefaultCategoryDataset;
	}
	
	public static PieDataset createPieDataset( List<AnalysisInfo> list,int type)
	  {
	    DefaultPieDataset localDefaultPieDataset = new DefaultPieDataset();
	    String key="";
	    for(AnalysisInfo analysisInfo:list){
	    	key = AnalysisTypeConstants.getTypeName(type, analysisInfo.getType());
	    	localDefaultPieDataset.setValue(key,analysisInfo.getCount());
	    }
	    
	    return localDefaultPieDataset;
	  }


	public static JFreeChart createBarChart(String title,
			String categoryAxisLabel, String valueAxisLabel,
			CategoryDataset paramCategoryDataset) {
		// 创建主题样式
		StandardChartTheme standardChartTheme = new StandardChartTheme("CN");
		// 设置标题字体
		standardChartTheme.setExtraLargeFont(new Font("隶书", Font.BOLD, 20));
		// 设置图例的字体
		standardChartTheme.setRegularFont(new Font("宋书", Font.PLAIN, 15));
		// 设置轴向的字体
		standardChartTheme.setLargeFont(new Font("宋书", Font.PLAIN, 15));
		// 应用主题样式
		ChartFactory.setChartTheme(standardChartTheme);
		JFreeChart jfreechart = ChartFactory.createBarChart3D(title, // 图表标题
				categoryAxisLabel, // 目录轴的显示标签
				valueAxisLabel, // 数值轴的显示标签
				paramCategoryDataset, // 数据集
				PlotOrientation.VERTICAL, // 图表方向:水平、垂直
				true, // 是否显示图例(对于简单的柱状图必须是false)
				true, // 是否生成工具
				true // 是否生成URL链接
				);
		// chart.getTitle().setFont(new Font("宋体", Font.BOLD,12));
		NumberAxis axis = (NumberAxis) jfreechart.getCategoryPlot()
				.getRangeAxis();

		axis.setTickUnit(new NumberTickUnit(5));// 0.5为一个间隔单位 Y

		return jfreechart;
	}

	public static JFreeChart createPaiChart(String title,
			PieDataset pieDataset) {
		// 创建主题样式
		StandardChartTheme standardChartTheme = new StandardChartTheme("CN");
		// 设置标题字体
		standardChartTheme.setExtraLargeFont(new Font("隶书", Font.BOLD, 20));
		// 设置图例的字体
		standardChartTheme.setRegularFont(new Font("宋书", Font.PLAIN, 15));
		// 设置轴向的字体
		standardChartTheme.setLargeFont(new Font("宋书", Font.PLAIN, 15));
		// 应用主题样式
		ChartFactory.setChartTheme(standardChartTheme);
		JFreeChart chart = ChartFactory.createPieChart3D(
				title, // 图表标题
				pieDataset, true, // 是否显示图例
				false, false);
		PiePlot plot = (PiePlot) chart.getPlot();
		resetPiePlot(plot);
		return chart;
	}

	private static void resetPiePlot(PiePlot plot) {
		String unitSytle = "{0}={1}({2})";

		plot.setNoDataMessage("无对应的数据,请重新查询。");
		plot.setNoDataMessagePaint(Color.red);

		// 指定 section 轮廓线的厚度(OutlinePaint不能为null)
		plot.setOutlineStroke(new BasicStroke(0));

		// 设置第一个 section 的开始位置,默认是12点钟方向
		plot.setStartAngle(90);

//		plot.setToolTipGenerator(new StandardPieToolTipGenerator(unitSytle,
//				NumberFormat.getNumberInstance(), new DecimalFormat("0.00%")));

		// 指定图片的透明度
		plot.setForegroundAlpha(0.65f);

		// 引出标签显示样式
//		plot.setLabelGenerator(new StandardPieSectionLabelGenerator(unitSytle,
//				NumberFormat.getNumberInstance(), new DecimalFormat("0.00%")));

		// 图例显示样式
		plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator(
				unitSytle, NumberFormat.getNumberInstance(), new DecimalFormat(
						"0.00%")));
	}

}

 

 AnalysisAction.java

public class AnalysisAction extends ActionSupport {

	private BasicInfo basicInfo;
	private BasicService basicService;


	private static final long serialVersionUID = 1L; 
    private JFreeChart chart; 

	@Override 
	public String execute() throws Exception { 
		return SUCCESS; 
	} 
	
	public String getGenderBar() throws Exception { 
		List<AnalysisInfo> analysisList = basicService.getAnalysisByGender();
		CategoryDataset dataset = BarChartUtil.createBarDataset(analysisList, 1); 
	    chart = BarChartUtil.createBarChart("性别统计图", "性别", "人数", dataset);
		return SUCCESS; 
	} 
	
	public String getGenderPie() throws Exception { 
		List<AnalysisInfo> analysisList = basicService.getAnalysisByGender();
		PieDataset dataset = BarChartUtil.createPieDataset(analysisList, 1); 
	    chart = BarChartUtil.createPaiChart("性别统计图", dataset);
		return SUCCESS; 
	} 
			
	public BasicService getBasicService() {
		return basicService;
	}

	public void setBasicService(BasicService basicService) {
		this.basicService = basicService;
	}

	public void setChart(JFreeChart chart) {
		this.chart = chart;
	}

	public JFreeChart getChart() { 
		return chart; 
	} 


}

 

AnalysisInfo .java

import com.rlzy.util.Util;

public class AnalysisInfo {

	private String type; // 类型
	private int count; // 个数

	public AnalysisInfo(String type, int count) {
		super();
		this.type = type;
		this.count = count;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public int getCount() {
		return count;
	}

	public void setCount(int count) {
		this.count = count;
	}

	public AnalysisInfo() {
		super();
	}

}

 

4.编写展示jsp页面

<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>

<% 
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>人力资源管理系统</title>
<base href="<%=basePath%>">
<link href="<%=path%>/styles/sty.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="<%=path %>/js/development-bundle/jquery.js"></script>
<style type="text/css">
<!--
body { background:#f2f2f2; }
-->
</style>
</head>
<script type="text/javascript">

$().ready(function() {

	$("#gender").change(function(){
		var gender =  $("#gender").val();		
		if(gender=="1"){
			$("#genderSrc").attr("src", "getGenderBar.action")
		}else{
			$("#genderSrc").attr("src", "getGenderPie.action");
		}
		
	});
	
	})

</script>
<body>

<div class=" title_ljt">
	<div class=" w50 floatleft">
            <div class="border">
                <div class=" title9">
                    <div class=" title9_a"></div>
                    <div class=" title9_b">按性别统计图示</div>
                    <div class=" title9_c">
                    	<select id="gender" name="gender"><option value="1">柱状图</option> <option value="2">饼状图</option> </select>
					</div>
                </div>
                <div class="h5"></div>
              	<div class="w100 aligncenter">
                  <img id="genderSrc" src="getGenderBar.action" />
              	</div>
                <div class="h10"></div>
            </div>
    	</div></div>
</body>
</html>

 

你可能感兴趣的:(JfreeChar结合struts2展示柱状图和饼状图(已解决乱码问题))