`

(一)用grails和FusionCharts(饼图和柱形图)来实现fusionCharts的下钻(link)以及基于数据库动态获得XML

阅读更多




工作准备:把要用到的饼图和柱形图的flash(Column3D.swf,Pie3D.swf)
放到web项目的根目录FusionCharts(这个可以自己定义)中,在gsp页面中添加(FusionCharts.js) <scriptlanguage="JavaScript"src="${request.getContextPath()}/FusionCharts/FusionCharts.js">

1.在controller中的action代码 此时的情况是登录进入系统后要自动去获得
xml数据。
所以在登录进入时,直接在登录action里调用String getBigCatePieXml()(饼图)
String getbardataXml()方法(柱形图)
   

    String getBigCatePieXml(){
        def logman = Client.findByName(session.name)
        def logmanComany = logman.clientCompany

               //admin
       Sql sql = new Sql(dataSource)
        if(session.name=='admin'){       
 def typeStr = "select cate.pur_big_cate_id as type_id,
count(list.id) as num FROM pur_list as list,pur_category cate 
where list.type_id = cate.id  group by cate.pur_big_cate_id"
         typeArr = sql.rows(typeStr)
        //设备总数
        def allshebeiStr = "select count(id) as num FROM pur_list "
         allshebeiArr = sql.rows(allshebeiStr)
        }else{       
 //def logmanComany = logman.clientCompany
       // Sql sql = new Sql(dataSource)
        def typeStr = "select cate.pur_big_cate_id as type_id,
count(list.id) as num FROM pur_list as list,pur_category cate 
where list.type_id = cate.id and 
client_company_id = "+logmanComany.id 
+" group by cate.pur_big_cate_id"
         typeArr = sql.rows(typeStr)
        //设备总数
     def allshebeiStr = "select count(id) as num FROM
 pur_list
 where client_company_id = "+logmanComany.id
         allshebeiArr = sql.rows(allshebeiStr)
        }
def pieXmldata = 
"<chart caption='您当前共有${allshebeiArr[0].num}
台设备' baseFontSize='12' >"
          typeArr.each{
   pieXmldata+=" <set label='"+
PurBigCate.get(it.type_id).name+"' value='"+it.num+"' 
link='../purList/piesearchCate/"+it.type_id+"'/>"
	  }
//link是实现FusionCharts的下钻功能的,在接下来的文章将会说明多层次下钻(3层)
	  pieXmldata+="</chart>"
         println pieXmldata
	 return pieXmldata //得到pieXmldata 此为xml串 并且返回
	    }


String getbarXml(){
        def logman = Client.findByName(session.name)
	def logmanComany = logman.clientCompany

        def bigCate
        if(params.bigCate){
             bigCate = params.bigCate
        }
        //admin
        Sql sql = new Sql(dataSource)
        if(session.name=='admin'){
        def barStr = "select 
(to_char(list.purchase_time,'YYYY')) 
as year,count(list.id) as num from 
pur_list as list,pur_category as cate where list.type_id = cate.id "
        if(bigCate){
     barStr +=" and cate.pur_big_cate_id ="+bigCate
        }
        def barorder = " group by (to_char(list.purchase_time,'YYYY')) order by (to_char(list.purchase_time,'YYYY'))"
         barStrAll = barStr + barorder
        def maxStr = " group by 
(to_char(list.purchase_time,'YYYY')) order by num desc"
         barMaxStr = barStr+ maxStr
        }else{
       def barStr = "select 
(to_char(list.purchase_time,'YYYY')) 
as year,count(list.id) as num from 
pur_list as list,pur_category as cate where list.type_id = cate.id and list.client_company_id = "+logmanComany.id
        if(bigCate){
   barStr +=" and cate.pur_big_cate_id ="+bigCate
        }
        def barorder = " group by (to_char(list.purchase_time,'YYYY')) order by (to_char(list.purchase_time,'YYYY'))"
     barStrAll = barStr + barorder
    def maxStr = " group by (to_char(list.purchase_time,'YYYY')) order by num desc"
         barMaxStr = barStr+ maxStr
        }
	
	 barArr = sql.rows(barStrAll)
         barMaxArr = sql.rows(barMaxStr)
     def  zhuXmldata = "<chart caption='购入数量(台)' baseFontSize='12' >"
       barArr.each{
zhuXmldata+=" <set label='"+it.year+"年"+"' value='"+it.num+"' link='${request.getContextPath()}/purList/searchByYear/"+it.year+"' />"
	 }

	 zhuXmldata+="</chart>"
         println zhuXmldata
	 return zhuXmldata
    }


在homeBody里调用String getBigCatePieXml()(饼图)
String getbardataXml()方法(柱形图)
def homeBody ={
..................................//代码省略
def peixml = getBigCatePieXml()
	def barxml = getbarXml()
	         println peixml
		 println barxml
render(view:'homeBody',model:[peixml:peixml,barxml:barxml])
//把peixml,barxml传到页面(view:'homeBody')就是指homeBody.gsp  
}
    

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
<meta http-equiv='Content-Type' 
content='text/html; charset=GBK'/>
  <meta http-equiv="X-UA-Compatible" 
content="IE=EmulateIE7" />
     <script language="JavaScript" src="${request.getContextPath()}/FusionCharts/FusionCharts.js">//这个必须要写的
        </script>
      		<title>首页</title>
             
</head>   
[img][/img]<body style="background:#fff;">  
     。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。  //js以及代码省略                                              <divid="chartdivbing" align="center" ></div>
// 这是饼图
                                                        <scripttype="text/javascript">   
var xmldata = "${peixml}"
							 //alert(xmldata)
var myChart = new FusionCharts
("${request.getContextPath()}/FusionCharts/Pie3D.swf", 
"myChartId", "105%", "300", "0", "0");
                                                            myChart.setDataXML(xmldata)
//通过setDataXMl()方法来获得xml串
          
 myChart.render("chartdivbing")
         
</script>
       。。。。。。。。。。。。。。。。。。。。。。                                                     
                               
 </td>
                  //这是柱形图              
                  
 <div id="chartdivzhu"></div>
                        
 <script type="text/javascript" align="center">
 var xmlbardata = "${barxml}"
                          
 var myChart = new FusionCharts
("${request.getContextPath()}/FusionCharts/Column3D.swf", 
"myChartId", "100%", "300", "0", "0");
                          
 myChart.setDataXML(xmlbardata)
                          
 myChart.render("chartdivzhu")
                          
 </script>
         
                 
                      
</body>
</html>    



得到的效果如上饼图和柱形图
我把图片上传了 想看效果自己去看吧

  • 大小: 9.2 KB
  • 大小: 14.1 KB
2
0
分享到:
评论
1 楼 java-007 2010-10-27  
嗯,不错。支持。

相关推荐

    grails 配置mongodb数据库

    总结,配置Grails使用MongoDB数据库主要涉及以下几个步骤:安装MongoDB,添加MongoDB插件依赖,配置数据库连接,创建数据模型,实现业务服务,以及创建控制器处理请求。通过这样的配置和实现,我们就能在Grails中...

    使用 Grails 快速开发 Web 应用程序

    借助Groovy的动态特性,Grails能用较少的代码和配置实现常见的Web功能,如表单处理和数据库交互,极大地提高了开发效率。同时,由于Groovy运行在Java虚拟机(JVM)上,Grails应用可无缝集成Java平台,利用Java的成熟...

    Grails 下拉框联动最优实现

    在Grails中,我们可以利用AJAX技术实现这种交互,AJAX即异步JavaScript和XML,它允许页面在不刷新整个页面的情况下与服务器交换数据并局部更新页面内容。这正是实现联动效果的关键,因为它能让用户体验更加流畅,...

    grails实现分页技术

    在Grails这个基于Groovy的敏捷开发框架中,实现分页功能对于任何Web应用程序都是至关重要的,特别是当处理大量数据时。Grails提供了一些内置的支持,但如果你需要在自定义的控制器和视图中实现分页,那么就需要遵循...

    Grails Grails Grails

    2. **视图(View)**: 视图负责展示数据,通常使用GSP(Grails Server Pages)技术,这是一种结合了HTML和Groovy的模板语言,可以嵌入Groovy表达式和控制结构,实现动态内容的生成。 3. **控制器(Controller)**: ...

    第一个grails程序

    总的来说,"第一个grails程序"是一个基础的登录验证系统,展示了Grails如何快速构建Web应用,包括处理用户请求、与数据库交互、实现业务逻辑和视图渲染。这个简单的例子对于初学者来说,是理解Grails框架工作原理和...

    grails使用freemarker.rar

    总结来说,这个压缩包内容可能包括如何在Grails项目中配置和使用FreeMarker,以及如何处理领域类之间的关系映射,特别是“one2many”关系。通过学习这些知识,开发者可以更有效地构建Grails应用,并利用FreeMarker...

    Eclipse下搭建Grails项目

    Grails是一个基于Groovy语言的开源Web应用框架,它简化了开发过程,尤其适合快速构建动态网站。在Eclipse中搭建Grails项目可能相对复杂,但通过以下步骤,即使是初学者也能顺利进行。 1. **Grails环境安装** - ...

    grails3 CAS链接接数据库

    标题中的“grails3 CAS链接接数据库”表明我们要讨论的是如何在Grails 3框架下集成CAS(Central Authentication Service)并实现与数据库的连接。Grails是一个基于Groovy语言的开源Web应用框架,而CAS是一种广泛使用...

    Grails3配置单独的数据库properties.pdf

    在IT行业中,Grails是一个基于Groovy语言的开源Web应用框架,它简化了Java平台上的开发工作。Grails 3是其一个重要的版本更新,带来了许多改进和新特性。本篇将详细介绍如何在Grails 3中配置单独的数据库properties...

    Grails权威指南 中文版

    Grails的独特之处在于它能够吸收其他流行框架的优点,比如Spring的依赖注入、Hibernate的对象关系映射能力、Quartz的强大调度功能以及SiteMesh的布局管理,而这一切都可以在Grails的简单约定和简洁语法下实现。...

    grails-用户手册

    Grails,作为一个基于Groovy语言的开源Web应用框架,深受开发者喜爱,它简化了Java开发的复杂性,提供了强大的MVC(Model-View-Controller)架构,以及丰富的插件系统。这份用户手册将帮助你深入理解和高效使用...

    Grails基础教程.pdf

    - **自动数据库移植**:Grails支持自动数据库迁移,通过简单的配置即可实现数据库结构的更新。 **3.2 日志配置** 合理的日志记录对于追踪问题、调试代码至关重要。 **3.3 数据源** - **数据源和环境**:不同环境...

    the definitive guide to grails 2

    Grails框架基于Groovy语言,是一种高度动态、敏捷的Java应用开发框架,它简化了Web应用程序的构建过程,同时保持了Java平台的强大功能和稳定性。 ### Grails框架简介 Grails框架是建立在Groovy编程语言之上的一个...

    grails快速开发web

    - **实战技巧**:包括 GORM (Groovy Object Relational Mapping) 的使用、如何在 Grails 中实现 Ajax 功能、处理遗留数据库的方法、利用遗留框架以及如何在 Grails 中使用 WebFlow。 - **高效编程系列**:涵盖使用 ...

    Grails 和 jQuery开发实例

    Grails是一个基于Java平台的全栈式框架,它简化了Web应用的开发过程,而jQuery则是一款强大的JavaScript库,能够帮助我们实现高效的DOM操作、事件处理以及Ajax交互。 首先,Grails的MVC架构使得开发者可以快速搭建...

    grails中文入门简介

    Grails是一个基于Groovy语言的全栈框架,它遵循约定优于配置的原则,并且紧密集成Spring和Hibernate等流行的Java库,简化了开发流程。Grails在IT行业中尤其受到重视,因为它能够帮助开发者快速搭建并部署基于MVC模式...

    Grails权威指南 Grails权威指南

    1. **Groovy语言基础**:Grails基于Groovy,一种动态、灵活的Java平台上的编程语言。Groovy的语法简洁,支持函数式编程,且与Java高度兼容,使得开发者可以利用已有的Java知识快速上手。 2. **MVC架构**:Grails...

Global site tag (gtag.js) - Google Analytics