多亏了道长A的FusionCharts Free中文开发指南,让我少走了很多弯路。
但是还是有一个难点,如何用优雅且高效的方法使用字符串将动态数据拼接成dataXml?(为啥不用dataUrl?——权衡后的选择)毕竟看着一个又一个的for循环,if判断语句,中间再夹杂着string符号和加号,怎么都觉得丑。觉得丑就会觉得有更好的选择。
不错!是有更好的选择,此刻我至少想到了7种方法。这些方法根据采用的技术不同又分为三类。孰优孰劣,视情况而定:
第一类:自己动手丰衣足食型。在要求的图形复杂度不是太高的情况下可以采用此种类型,一般都是single series charts。此类包括两种方法:
1.一个方法搞定一切。只将需要的value,name等简单的封装,放入一个方法中,在这个方法中将大部分数据写死。
public static StringBuilder genBar2DXml(String month, List results) {
StringBuilder temp = new StringBuilder("");
temp
.append("<graph caption='"
+ month
+ " Sales' numberSuffix='%25' xAxisName= '省份' yAxisName= 'Units' showNames= '1' decimalPrecision='2' formatNumberScale='0' chartRightMargin='30'> ");
for (int i = 0; i < results.size(); i++) {
String strs[] = (String[]) results.get(i);
temp
.append("<set name='" + strs[0] + "' value='" + strs[1]
+ "'/>");
}
temp.append("</graph>");
return temp;
}
2.对fcf的xml文档进行分析,发现简单的图形只是graph和set的两级标签,稍复杂的图形有一级graph,二级 dataset,categories,三级set,category标签。可以为这些标签配置不同的生成方法。
public static StringBuilder genSet(List<String[]> results)
public static StringBuilder genGraph(GraphInfo graphInfo)
public static StringBuilder genDataset(String[] values, String seriesname, int mode)
public static StringBuilder genCategories(String[] names)
这四个方法,基本可以解决稍微复杂的问题了。但是可能会有些繁琐,因为graph可能会需要较多的属性设置;同时,在需求可能会频繁改变的情况下,不能保证修改能及时跟上。(毕竟一个图形的属性太多了)
第二类:拿来主义型。这个没有多说的,认真查阅英文文档,直接就用fcf的FusionChartsDOM.js来做,但这个的难点在于仍然需要自己拼接一部分内容,同时从数据库中读取数据再到网页中,数据始终处于一种不平稳的状态,一直到网页中才会生成最终采用的dataXml数据,这个不太好。
第三类:疯狂的拿来主义型。既然前两种都感觉有缺陷,不优雅,那么我就在想,我是不是走错路了?学习java,一个关键就是学会取用,而不是钻研。图形生成的关键在于xml,我为什么非要自己来封装这个功能呢?我能不能找找看,是否有现成的东西可以用?找到了,至少有四种,四种用于解析生成xml文档的解决方案。对,这就是那四种方法:DOM, SAX, DOM4J, JDOM。
稍微回顾一下步骤:首先从数据库中读取配置信息,装配成GraphConfig,然后根据GraphConfig中的信息生成GraphInfo,经过查询后,此时GraphInfo中已经信息完备了。然后再使用dom4j(个人比较喜欢)的xml生成方案,重写生成 graph,set,dataset,categories标签的方法,这样重写之后,代码果然更简洁了,而且,如果需求有变化,源于dom4j中xml 文档对象的树结构,代码也变得容易修改了。
至此,这个dataxml的生成算解决了。
分享到:
相关推荐
Jmeter使用手记Jmeter使用手记Jmeter使用手记Jmeter使用手记
sqlmap使用手记sqlmap使用手记sqlmap使用手记sqlmap使用手记sqlmap使用手记
如题:MATLAB GUI设计学习手记(第二版)源程序
boost类库安装使用手记
一、 基本使用方法 4 1.导入Dll文件 4 2.Asp.Net页面控件注册 4 3. Asp.Net页面控件声明 5 4.删除licenses.licx协议文件(盗版) 5 5.功能概述 5 二、 绑定数据(单层) 5 1.使用DataSource属性绑定DataTable 5 2....
史上最全的AspxGridView使用手记,是word文档(共84页!),下面的目录 一、 基本使用方法 4 1.导入Dll文件 4 2.Asp.Net页面控件注册 4 3. Asp.Net页面控件声明 5 4.删除licenses.licx协议文件(盗版) 5 5.功能概述 5 二...
资源名称:Python数据分析教程_NumPy使用手记内容简介:NumPy系统是Python的一种开源的数字扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以...
浏览地球_WorldWind1_3使用手记.pdf
Matlab_GUI设计学习手记(第二版)_串口例程程序
水晶报表是一个优秀的报表开发工具,本人在开发通用管理系统的时候,所有报表都使用水晶报表,其简单、易用和强大的功能令笔者倍加喜爱,现将水晶报表使用手记呈现给大家。
盖国强 ORACLE DBA 手记 第二章
微博分析-内容分析系统 ROST CM 6 使用手记
IT项目经理成长手记PDF,非常不错的资源
python之numpy使用手记;
VC6下正则greta库的测试和使用手记,介绍了怎样在没有原生正则表达式支持的vc6.0环境下使用greta库进行正则匹配