圖表組件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尾碼。
本文出自 “野馬紅塵” 部落格,謝絕轉載!