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