文档章节

FusionChartsFree的JSP标签开发

secondriver
 secondriver
发布于 2015/09/17 09:11
字数 835
阅读 7
收藏 0

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

 

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

© 著作权归作者所有

secondriver
粉丝 10
博文 229
码字总数 233821
作品 0
广州
程序员
私信 提问
Servlet 3.0 新特性详解

简介: Servlet 是 Java EE 规范体系的重要组成部分,也是 Java 开发人员必须具备的基础技能,Servlet 3.0 是 Servlet 规范的最新版本。本文主要介绍了 Servlet 3.0 引入的若干重要新特性,包...

红薯
2010/04/23
1K
3
Servlet 3.0 新特性

Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布。该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发和部署。其中有几项特性的引入...

壹炮倾城
2013/06/13
174
1
Servlet 3.0 特性详解

Servlet 是 Java EE 规范体系的重要组成部分,也是 Java 开发人员必须具备的基础技能,本文主要介绍了 Servlet 3.0 引入的若干重要新特性,包括异步处理、新增的注解支持、可插性支持等等,为...

那位先生
2015/06/12
266
0
EL表达式和JSTL标签

EL表达式: EL表达式用于获取数据,在JSP页面中可使用${标识符}的形式,通知JSP引擎调用pageContext.findAttribute()方法,以标识符为关键字从各个域对象中获取对象。如果域对象中不存在标识...

晨曦之光
2012/05/16
194
0
TagSupport类的声明周期

(1) 当jsp容器在解释jsp页面时,如果遇到自定义标签的开始标记,将利用“标签处理类”创建一个“标签处理对象”。在建立“标签处理对象”的过程中,jsp容器会毁掉setPageContext()方法,然...

晨曦之光
2012/05/16
41
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
49分钟前
4
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
4
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
13
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
14
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部