FusionChartsFree的JSP标签开发

   图表组件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后缀。

 

本文出自 “野马红尘” 博客,谢绝转载!

你可能感兴趣的:(tag,jstl)