FusionChartsFree的JSP標籤開發

來源:互聯網
上載者:User

   圖表組件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尾碼。

 

本文出自 “野馬紅塵” 部落格,謝絕轉載!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.