cewolf學習筆記
1.匯入包
:http://cewolf.sourceforge.net/new/index.html
(1)匯入包 到 WEB-INF/lib下
cewolf-1.0.jar
batik-*.jar
jcommon-1.0.0.jar
jfreechart-1.0.jar
(2)匯入標籤檔案到WEB-INF下
cewolf.tld
2.配置web.xml檔案
新增:
<servlet>
<servlet-name>CewolfServlet</servlet-name>
<servlet-class>de.laures.cewolf.CewolfRenderer</servlet-class>
<!-- sets storage implementation -->
<init-param>
<param-name>storage</param-name>
<param-value>de.laures.cewolf.storage.TransientSessionStorage</param-value>
</init-param>
<!-- sets overlib.js location relative to webapp -->
<init-param>
<param-name>overliburl</param-name>
<param-value>/etc/overlib.js</param-value>
</init-param>
<!-- turn on or off debugging logging -->
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>4</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CewolfServlet</servlet-name>
<url-pattern>/adChart/*</url-pattern>
</servlet-mapping>
3.寫類檔案
類必須實現DatasetProducer介面
例:
package action;
import java.io.Serializable;
import java.util.Date;
import java.util.Map;
import org.jfree.data.category.DefaultIntervalCategoryDataset;
import de.laures.cewolf.DatasetProduceException;
import de.laures.cewolf.DatasetProducer;
public class Tu implements DatasetProducer, Serializable{
String categories[] = {"mon","tues","sun"};
String seriesNames [] = {"show","click","ctr"};
public String getProducerId() {
return "CategoryDataProducer";
}
public boolean hasExpired(Map arg0, Date arg1) {
return true;
}
public Object produceDataset(Map arg0) throws DatasetProduceException {
//以下是測試資料
Number[][] datasets = new Number[3][3];
datasets[0][0] = new Integer(201);
datasets[0][1] = new Integer(2);
datasets[0][2] = new Integer(3);
datasets[1][0] = new Integer(11);
datasets[1][1] = new Integer(22);
datasets[1][2] = new Integer(33);
datasets[2][0] = new Integer(44);
datasets[2][1] = new Integer(55);
datasets[2][2] = new Integer(66);
//參數1:橫軸 參數2:縱軸
DefaultIntervalCategoryDataset ds = new DefaultIntervalCategoryDataset(
categories,seriesNames, datasets,datasets);
return ds;
}
}
4.寫JSP檔案
以下是個柱狀圖:
<%@ page language="java" pageEncoding="UTF-8" import="yicha.tool.IpList"%>
<%@taglib uri='/WEB-INF/cewolf.tld' prefix='cewolf' %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>test</title>
</head>
<body>
<%
action.Tu tu = new action.Tu();
pageContext.setAttribute("data1",tu);
%>
<cewolf:chart id="pageChart2" title="日期柱狀圖" type="stackedHorizontalBar" xaxislabel="時間" yaxislabel="數量">
<cewolf:data>
<cewolf:producer id="data1" />
</cewolf:data>
</cewolf:chart>
<cewolf:img chartid="pageChart2" renderer="/adChart" width="500" height="500"/>
</body>
</html>
5.網上的一些資料
圖形 中文 對應的資料類(例子中的)()在 public Object produceDataset(Map params)中返回
——————————————————————————————
area 面積圖, TimeSeriesCollection(new TimeSeries("title", Month.class));
areaxy 面積XY圖 new DefaultIntervalCategoryDataset(seriesNames, categories, startValues, endValues)
horizontalbar 水平柱條 new DefaultIntervalCategoryDataset(seriesNames, categories, startValues, endValues);
horizontalbar3d 3D水平柱條 DefaultIntervalCategoryDataset(seriesNames, categories, startValues, endValues);
line 折線圖 DefaultIntervalCategoryDataset(seriesNames, categories, startValues, endValues);
DefaultCategoryDataset;
pie 餅圖 new DefaultPieDataset();
scatter XY散佈圖
stackedhorizontalbar 管狀水平柱圖 DefaultIntervalCategoryDataset(seriesNames, categories, startValues, endValues);
stackedverticalbar, 管狀垂直柱圖 DefaultIntervalCategoryDataset(seriesNames, categories, startValues, endValues);
stackedverticalbar3d 3D管狀垂直柱圖 DefaultIntervalCategoryDataset(seriesNames, categories, startValues, endValues);
timeseries 時間順序圖表 new TimeSeries("title", Month.class);
verticalbar 垂直柱條圖 DefaultIntervalCategoryDataset(seriesNames, categories, startValues, endValues);
verticalbar3d 3D垂直柱條圖 DefaultIntervalCategoryDataset(seriesNames, categories, startValues, endValues);
xy, ?? XY散佈圖 XYSeriesCollection(new XYSeries("Example XY Dataset")
candlestick 股價圖 DefaultHighLowDataset;
highlow 高低數值圖 new DefaultHighLowDataset("Laures, Inc.", dates, high, low, open, close, volume)
gantt, 岡特圖 new TaskSeriesCollection()
wind, ??
signal 訊號圖 SubSeriesDataset(TimeSeriesCollection(new TimeSeries()), int index);
verticalxybar 垂直柱狀數值圖 TimeSeriesCollection(new TimeSeries());
pie3d 3D餅圖 同餅圖
6.日期折線圖樣本(timeseries)
public class AdDateLineDataset implements DatasetProducer, Serializable {
private Number[] data;
private Date[] dateCategories;
public AdDateLineDataset(Date[] d, Number[] a) {
data = a;
dateCategories = d;
}
public Object produceDataset(Map params) {
TimeSeries ts1 = new TimeSeries(title, org.jfree.data.time.Day.class);
for (int i = 0; i < data.length; i++) {
ts1.add(new org.jfree.data.time.Day(dateCategories[i]), data[i]);
}
TimeSeriesCollection collect = new TimeSeriesCollection(ts1);
return collect;
}
public String getProducerId() {
return "TimeDataProducer";
}
public boolean hasExpired(Map params, Date since) {
return true;
}
}
7.餅狀圖樣本(pie)
public class AdPieDataset implements DatasetProducer, Serializable {
private Object data;
final String[] categories = { "Docomo", "AU", "Softbank"};
public AdPieDataset(Object obj) {
data = obj;
}
public Object produceDataset(Map params) {
DefaultPieDataset ds = new DefaultPieDataset();
int[] iData;
double[] dData;
if (data instanceof int[]) {
iData = (int[]) data;
for (int i = 0; i < iData.length; i++) {
ds.setValue(categories[i], new Integer(iData[i]));
System.out.println("pvi:" + i + "=" + iData[i]);
}
}else if (data instanceof double[]) {
dData = (double[]) data;
for (int i = 0; i < dData.length; i++) {
ds.setValue(categories[i], new Double(dData[i]));
System.out.println("pvd:" + i + "=" + dData[i]);
}
}
return ds;
}
public String getProducerId() {
return "adunion_PieDataProducer";
}
/**
* 50秒到期
*/
public boolean hasExpired(Map params, Date since) {
return (System.currentTimeMillis() - since.getTime()) > 50000;
}
}