圖表元件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字尾。