图表组件FusionChartsFree的收费版FusionChartsSuite提供的标签处理,JSON数据格式,等更加丰富的功能,官方网站:http://www.fusioncharts.com/
写一个JSP标签,一个Java文件,一个标签定义,避免重复写好多嵌入FusionChartsFree的代码。
第一步:定义标签属性等信息,编写TLD文件;
第二步:编写标签处理的代码;
第三步:测试标签;
第四步:打包发布。
关键:TLD文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> <short-name>jrtz</short-name> <uri>http://www.sunrise.com/jrtz</uri> <tag> <name>fcf</name> <tag-class>com.sunrise.broncho.tag.FusionChart</tag-class> <body-content>JSP</body-content> <description><![CDATA[FusionChartsFree 图表组件应用在JSP页面]]></description> <attribute> <name>chartSWF</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <description><![CDATA[FusionChart的模版图例文件名]]></description> </attribute> <attribute> <name>divId</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <description><![CDATA[图表所显示在的Div的Id]]></description> </attribute> <attribute> <name>chartId</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <description><![CDATA[图表的名称Id]]></description> </attribute> <attribute> <name>dataXml</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description><![CDATA[数据源信息,XML数据源.如果使用XML数据源时,URL和XML同时存在优先使用XML数据源]]></description> </attribute> <attribute> <name>dataUrl</name> <required>true</required> <rtexprvalue>true</rtexprvalue> <description><![CDATA[数据源信息,URL数据源.如果使用XML数据源时该参数设为:""即可]]></description> </attribute> <attribute> <name>chartWidth</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description><![CDATA[图标显示的宽,默认值为300]]></description> </attribute> <attribute> <name>chartHeight</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description><![CDATA[图标显示的高,默认值为180]]></description> </attribute> <attribute> <name>deCode</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description><![CDATA[注意:仅在使用URL数据源下使用,对URL进行编码或解码,ture为解码,false为编码,默认值为false]]></description> </attribute> <attribute> <name>charName</name> <required>false</required> <rtexprvalue>true</rtexprvalue> <description><![CDATA[注意:仅在使用URL数据源下使用,对URL进行编码解码的处理的字符名称,默认为:UTF-8]]></description> </attribute> </tag> </taglib>
FusionChartsFree的相关:http://aiilive.blog.51cto.com/1925756/1267021
关键:Java业务处理
import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; /** * 使用FusionChartsFree图标组件的标签支持类 * * @author ZhangXiao * @time 2013-8-12 */ public class FusionChart extends TagSupport { /** * */ private static final long serialVersionUID = -455570295257618661L; private String chartSWF = ""; private String divId = ""; private String dataUrl = null; private String dataXml = null; private String chartId = divId + "chart"; private int chartWidth = 300; private int chartHeight = 180; private boolean deCode = false; private String charName = "UTF-8"; @Override public int doStartTag() throws JspException { try { byte[] script = createScript().getBytes(); pageContext.getOut().write(new String(script, "UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return super.doStartTag(); } /** * 通过标签参数创建JavaScript脚本信息 * * @return 返回图表渲染脚本 */ private String createScript() { StringBuffer sb = new StringBuffer(); sb.append("<script type='text/javascript'>"); sb.append("var fcf=new FusionCharts("); sb.append("'"); sb.append(chartSWF); sb.append("', "); sb.append("'"); sb.append(chartId); sb.append("', "); sb.append("'"); sb.append(chartWidth); sb.append("', "); sb.append("'"); sb.append(chartHeight); sb.append("' ); "); if ((this.dataUrl == null && this.dataXml == null) || (this.dataUrl == "" && this.dataXml == "")) { sb = new StringBuffer(); sb.append("无有效数据支持!"); } else { // 数据源的选取,XML和URL都存在时:优先选择XML if (this.dataXml != null) { sb.append("fcf.setDataXML(\""); sb.append(this.dataXml); sb.append("\"); "); } else { sb.append("fcf.setDataURL('"); if (!this.deCode) { sb.append(this.encode(this.dataUrl)); } else { sb.append(this.decode(this.dataUrl)); } sb.append("'); "); } sb.append("fcf.render('"); sb.append(this.divId); sb.append("'); "); sb.append("</script>"); } return sb.toString(); } /** * 对URL进行解码 * * @param url * @return 返回解码字符串 */ private String decode(String url) { try { return URLDecoder.decode(url, this.charName); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return url; } /** * 对URL进行编码 * * @param url * @return 返回编码字符串 */ private String encode(String url) { try { return URLEncoder.encode(url, this.charName); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return url; } }
关于测试参见附件例子FusionChartsFree JSP Tag web工程,例子文件要去掉.txt后缀。