`
tmuffamd
  • 浏览: 28450 次
  • 性别: Icon_minigender_2
  • 来自: 重庆
社区版块
存档分类
最新评论

用Struts2生成Open Flash Chart 2图表数据

 
阅读更多

准备以下开源项目:
1. Struts 2.1.6
2. Open Flash Chart 2 Version 2 Lug Wyrm Charmer (28th, July 2009)
3. jofc2,这东西不知道是没做好还是什么意思,好像和ofc2不怎么匹配,最好下源码,有什么问题直接改。
4. log4j

用eclipse新建动态网站,取名OFC2Demo,将Struts2 lib目录下commons-fileupload-1.2.1.jar、commons-logging-1.0.4.jar、freemarker-2.3.13.jar、ognl-2.6.11.jar、struts2-core-2.1.6.jar、xstream-1.3.1.jar和xwork-2.1.2.jar、log4j.jar复制到WebContent\lib目录下。

使用svn下载jofc2源码,http://jofc2.googlecode.com/svn/trunk/,将下载后的src目录下的jofc2整个目录和下级内容全部复制到项目src目录下。

在web.xml中加入struts2拦截器

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  
<display-name>OFC2Demo</display-name>

  
<filter>
    
<filter-name>struts2</filter-name>
    
<filter-class>
      org.apache.struts2.dispatcher.FilterDispatcher
    
</filter-class>
  
</filter>

  
<filter-mapping>
    
<filter-name>struts2</filter-name>
    
<url-pattern>/*</url-pattern>
  
</filter-mapping>

  
<welcome-file-list>
    
<welcome-file>index.html</welcome-file>
    
<welcome-file>index.htm</welcome-file>
    
<welcome-file>index.jsp</welcome-file>
    
<welcome-file>default.html</welcome-file>
    
<welcome-file>default.htm</welcome-file>
    
<welcome-file>default.jsp</welcome-file>
  
</welcome-file-list>
</web-app>


在返回jofc2生成Open Flash Chart数据时,本来想用jsonplugin插件,但发现序列化jofc2的Chart对象时,许多元素名称和Chart.toString()不同,这使得Open Flash Chart解析数据时不认识。所以需增加一个Struts2自定义Result Type,步骤如下:
新建类,OFC2Plugin

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->package com.xy.strutsplugin;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;

import jofc2.model.Chart;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.StrutsStatics;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.Result;
import com.opensymphony.xwork2.util.ValueStack;

public class OFC2Result implements Result {
    
private static final long serialVersionUID = 6881760833309063964L;
    
private static final Log log = LogFactory.getLog(OFC2Result.class);

    
public void execute(ActionInvocation invocation) throws Exception {
        ActionContext actionContext 
= invocation.getInvocationContext();
        HttpServletResponse response 
= (HttpServletResponse) actionContext
                .get(StrutsStatics.HTTP_RESPONSE);
        
        
try {
            ValueStack stack 
= invocation.getStack();
            Chart chart 
= (Chart)stack.findValue("ofcChart");
            
            response.setContentType(
"application/json-rpc;charset=utf-8");
            response.setHeader(
"Cache-Control""no-cache");
            response.setHeader(
"Expires""0");
            response.setHeader(
"Pragma""No-cache");
            
            PrintWriter out 
= response.getWriter();
            log.debug(chart.toString());
            out.print(chart.toString());
        } 
catch (IOException exception) {
            log.error(exception.getMessage(), exception);
            
throw exception;
        }
    }
}

在src下新建struts-plugin.xml

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
        
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    
<package name="ofc2-default" extends="struts-default">
        
<result-types>
            
<result-type name="ofc2" class="com.xy.strutsplugin.OFC2Result"/>
        
</result-types>
    
</package>
</struts>


配置log4j,以查看json输出信息。
在src下增加两个文件
commons-logging.properties

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->## set Log as Log4j
org.apache.commons.logging.Log
=org.apache.commons.logging.impl.Log4JLogger

log4j.properties

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --># This is the configuring for logging displayed in the Application Server
log4j.rootCategory
=DEBUG,stdout

#stdout configure
log4j.appender.stdout
=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout
=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern
= %%p [%c] - <%m>%n

##
log4j.logger.com.xy.strutsplugin.OFC2Result=DEBUG


好了,现在将ofc所需的包添加到项目中
在WebContent目录下添加文件夹ofc2,将open-flash-chart-2-Lug-Wyrm-Charmer目录下的open-flash-chart.swf和js目录复制到新建的ofc2目录下。

演示Line Chart
在Action层增加类LineAction

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->package com.xy.action;

import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;

import jofc2.model.Chart;
import jofc2.model.elements.LineChart;
import jofc2.model.axis.YAxis;
import jofc2.model.Text;

import com.opensymphony.xwork2.ActionSupport;

public class LineAction extends ActionSupport{
    
private static final long serialVersionUID = -5759373192727732648L;
    
    
private Chart ofcChart;
    
public Chart getOfcChart() {
        
return ofcChart;
    }
    
    
public String dot(){
        List
<LineChart.Dot> data1=new ArrayList<LineChart.Dot>()
                , data2
=new ArrayList<LineChart.Dot>()
                , data3
=new ArrayList<LineChart.Dot>();
        
for(double i=0;i<6.2;i+=0.2){
            
// line 1 dot
            LineChart.Dot dot1 = new LineChart.Dot(Math.sin(i)*1.9+10);
            dot1.setDotSize(
5);            // 点大小
            dot1.setColour("#f00000");    // 设置点颜色
            data1.add(dot1);
            
            
// line 2 dot
            LineChart.Dot dot2 = new LineChart.Dot(Math.sin(i)*1.9+7);
            dot2.setDotSize(
3);
            dot2.setHaloSize(
1);        // 点外空白大小
            dot2.setColour("#3D5C56");
            data2.add(dot2);
            
            
// line 3 dot
            LineChart.Dot dot3 = new LineChart.Dot(Math.sin(i)*1.9+4);
            dot3.setDotSize(
4);
            dot3.setHaloSize(
2);
            data3.add(dot3);
        }
        
        Date date 
= new Date();
        Locale locale 
= new Locale("zh","CN");
        DateFormat dateFormat 
= DateFormat.getDateInstance(DateFormat.FULL, locale);
        
        
// line 1
        LineChart line1 = new LineChart();
        line1.setDotStyle(
new LineChart.Style(LineChart.Style.Type.DOT));
        line1.setWidth(
1);            // 线宽
        line1.addDots(data1);        // 增加数据
        
        
// line 2
        LineChart line2 = new LineChart();
        line2.setDotStyle(
new LineChart.Style(LineChart.Style.Type.DOT));
        line2.setColour(
"#3D5C56");
        line2.setWidth(
2);
        line2.addDots(data2);
        
        
// line3
        LineChart line3 = new LineChart();
        line3.setDotStyle(
new LineChart.Style(LineChart.Style.Type.DOT));
        line3.setWidth(
6);
        line3.addDots(data3);
        
        YAxis y 
= new YAxis();
        y.setRange(
0155);        // 设置Y柚范围,参数依次为最小值、最大值、间隔

        ofcChart 
= new Chart();
        ofcChart.setTitle(
new Text(dateFormat.format(date)));    // 设置标题
        ofcChart.addElements(line1);                            // 增加线到图表
        ofcChart.addElements(line2);
        ofcChart.addElements(line3);
        ofcChart.setYAxis(y);                                    
// 设置Y柚
        
        
return SUCCESS;
    }
}


增加struts配置文件

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd"
>

<struts>
    
<package name="ofc2" extends="ofc2-default">
       
<action name="line" class="com.xy.action.LineAction">
         
<result type="ofc2"/>
       
</action>
    
</package>
</struts>


在WebContent目录下增加line目录,目录下增加dot.html,对应官方示例Line Dot,dot.html内容如下:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Line Dot</title>

<script type="text/javascript" src="../jquery/jquery.js"></script>
<script type="text/javascript" src="../ofc2/js/swfobject.js"></script>

<script type="text/javascript" language="javascript">
    $(document).ready(
function(){
        swfobject.embedSWF(
"../ofc2/open-flash-chart.swf"
                    
"chart""550""300""9.0.0",
                    
"expressInstall.swf",
                    {
"data-file":"line!dot"});
    });
</script> 
</head>
<body>
    
<div id="chart"></div>
</body>
</html>

这里用到了一点jquery的东西,请把jquery的包增加到相应目录下。

运行Tomcat,浏览器输入http://localhost:8080/OFC2Demo/line/dot.html,出下如下图表

  • 大小: 47 KB
分享到:
评论

相关推荐

    图表工具(Open_Flash_Chart)在java中的使用

    Open Flash Chart是一款强大的图表工具,尤其适用于Java开发者。它是一个基于Flash的图形库,能够创建出美观、流畅的图表,支持多种图表类型,包括条形图、饼图、线图等,总计11种基本图形,能满足大多数数据分析和...

    Open Flash Chart的应用(java),就是很炫的报表了

    这里面有两个java代码工程和 Open ...注:Open Flash Chart是根据传入的json数据的参数不同,来显示不同的chart图,非常的方便。只要学习下各种图形都包含哪些参数,把这些参数设置好,就能很容易的构建出一个图形。

    struts2 生成验证码

    ### Struts2 生成验证码知识点解析 #### 一、引言 在Web应用程序开发中,验证码是一种常见的安全机制,用于防止自动化的恶意攻击,如垃圾邮件发送或非法登录尝试等。Struts2作为一款流行的Java Web应用框架,支持...

    java+struts2实现图表显示

    本教程将详细介绍如何使用Java和Struts2框架来实现在网页上显示各种图表,如折线图、柱状图和饼状图。 首先,我们需要引入图表库。常见的Java图表库有JFreeChart和Chart.js等。在这个案例中,我们可能使用...

    Android开发HTTP传输数据到Struts2生成Json数据案例

    为了接收JSON数据,需要在Action类的方法上使用`@Action("your-action")`注解,并设置接受的参数类型为`Map, Object&gt;`或自定义的Java对象,Struts2会自动将JSON数据解析到这些参数中。 ```java public class Your...

    使用struts标签生成动态图表

    总结来说,使用Struts标签生成动态图表涉及了Struts框架的标签库使用、后端数据处理(如JFreeChart)、模型驱动的MVC设计以及可能的前端交互技术。通过这个项目,初学者可以深入理解Struts的工作原理,并提升Java ...

    flashchart 整合S2SH源码

    2. **创建图表数据**:在Hibernate的帮助下,从数据库中检索需要展示的数据。例如,如果你要展示销售报告,你需要从数据库查询销售额和时间的数据。 3. **生成XML数据**:FlashChart通过XML数据来渲染图表。因此,...

    struts2生成中文验证码的Action

    在这个特定的场景中,我们讨论的是如何在Struts2中创建一个能够生成中文验证码的Action。 验证码的主要目的是防止自动机器人或恶意攻击,通过向用户提供一组随机字符(通常是数字和/或字母)来验证他们是否是真实的...

    struts2-生成图片验证码

    "struts2-生成图片验证码"的主题表明我们将探讨如何在Struts2框架中实现图片验证码的功能。 验证码通常由随机生成的一串字符组成,这些字符以图像形式显示,用户需要输入他们看到的字符以完成验证。在Struts2中实现...

    struts2+MySQL+jfreechart生成带热点

    在"struts2+MySQL+jfreechart生成带热点"的场景中,我们可以构建一个Web应用,该应用能够从MySQL数据库中检索数据,然后使用JFreeChart生成包含热点的图表。热点是指图表上的区域,当用户点击这些区域时,可以触发...

    Struts2 经典flash上传文件

    在本案例中,我们将探讨如何使用Struts2与Flash技术相结合实现文件的上传,并且展示上传进度条,提高用户体验。 1. **Struts2文件上传基础** - Struts2提供了一个名为`CommonsFileUploadInterceptor`的拦截器,它...

    Struts2的验证码生成

    2. **配置Struts2**:在Struts2的配置文件(struts.xml)中,我们需要定义一个Action,这个Action将负责生成验证码。Action应该有一个结果类型,指向一个JSP页面或者FreeMarker模板,用于显示验证码图片。 3. **...

    java struts 代码生成器

    通过自动化的代码生成,它可以快速创建出符合Struts框架规范的基础代码结构,包括控制器、模型、视图以及相应的数据访问层。 1. **Struts框架基础**: - **MVC模式**:Struts框架遵循MVC模式,将业务逻辑、用户...

    Struts2整合JFreeChart 实现柱状图表

    当我们需要在Struts2应用中展示数据时,整合JFreeChart能够帮助我们生成交互式且美观的图表。 首先,让我们深入了解一下Struts2框架。Struts2基于MVC(Model-View-Controller)设计模式,它将业务逻辑、视图和控制...

    struts2图表笔记

    动态图表是基于数据生成的可视化图像,可以实时反映系统状态或分析结果。在Web应用中,通常使用JavaScript库(如Highcharts、ECharts、D3.js等)结合服务器端的数据来实现。Struts2可以作为桥梁,将后端计算结果传递...

    Struts2+IText动态导出PDF示例源码

    总的来说,这个示例展示了如何在Java Web环境中集成多个库,实现数据的动态导入导出和PDF生成,对于理解Web应用的开发流程、Struts2的控制逻辑、IText的PDF操作、以及POI与Hibernate的数据库操作有很好的学习价值。...

    struts 生成图表

    在这个小实验中,我们将探讨如何利用Struts2和JFreeChart库在JSP页面上生成饼图。 **1. Struts2基础** Struts2的核心是Action类,它是业务逻辑的载体。Action类处理用户请求,执行相应的业务逻辑,并将结果转发给视...

    在Struts2中使用JasperReports生成报表

    将Struts2与JasperReports结合使用,可以方便地在Web应用中实现动态报表的生成和展示。 首先,我们需要了解Struts2中整合JasperReports的基本步骤: 1. **环境准备**:确保你已经安装了MyEclipse开发环境,并且在...

    FreeMarker,Struts2,代码生成器

    在使用FreeMarker和Struts2时,代码生成器可以结合这两者的优势,自动生成符合这两框架规范的代码。例如,对于视图层,代码生成器可以基于FreeMarker模板生成HTML页面;而对于控制器层,可以生成基于Struts2 Action...

Global site tag (gtag.js) - Google Analytics