较早的前几年,J2EE应用的画图还使用jfreeChart这一呆板的开源项目,相继而推出cewolf标签。
从07年开始,随着json的成熟,一些商业的作图产品陆续地推出基于flash的动态展现技术,使得java ee画图这一块有了革命性的前景。秉承java语言开源性这一优势,jofc2让我们不再需要花费一美金就能画出好看的pieChart、barChart、lineChart、stackBarChart等众多美图。遗憾的是,在google网站上,jofc2的研究只停留在08年2月份的v.0,目前支持的图形种类还很有限,并且这个项目本身也不带demo practice,图片还缺少热点连接等等许多缺陷,HorizontalBar.java似乎还存在一点问题。
所以很期待jofc能够尽快推出新版本,以满足我们的需要,否则google.cn真的要失去中国程序员这一块肥沃的市场了。期待中。。。
本人不才,针对图片应用,现在搭建了一个taglib,分别基于jfreechart和jofc两种实现,如果有可能,还将加入其他的实现。现将结果简要描述如下:
DisplayChartTag通过ajax提交form到“*.chart”
-->GraphicServlet转交request给AbstractGraphic的实例(jfreechart或jofc)输出
-->1. AbstractJFreeGraphic调用jfreeChart ServletAPI生成image(因为jfreechart设计不好,每一种chart一个Graphic实例)
2. JofcGraphic提交到BodyTagServlet生成json数据给open-flash-chart.swf
web.xml
<servlet>
<servlet-name>displayChartServlet</servlet-name>
<servlet-class>com.tsinghuatec.dawn.waf.view.taglibs.graphic.GraphicServlet</servlet-class>
<init-param>
<param-name>implClass</param-name>
<param-value>jofc</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>displayChartServlet</servlet-name>
<url-pattern>*.chart</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>DisplayChart</servlet-name>
<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DisplayChart</servlet-name>
<url-pattern>/servletDisplayChart</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>wafBodyServlet</servlet-name>
<servlet-class>com.tsinghuatec.dawn.waf.view.taglibs.notag.BodyTagServlet</servlet-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>wafBodyServlet</servlet-name>
<url-pattern>/wafbody</url-pattern>
</servlet-mapping>
test_chart.jsp
<waf:body action="com.tsinghuatec.dawn.waf.view.taglibs.graphic.test.TestAction">
<waf:chart id="xxxx1" chartType="pie" title="Profit Present" axisX="age" axisY="profit"
legend="true" valueVisible="true" useMap="${param.useMap}"/>
<waf:chart id="xxxx2" chartType="line" title="Profit Present" axisX="age" axisY="profit"
legend="true" valueVisible="true" useMap="${param.useMap}"/>
</waf:body>