Grails Birt插件常见问题解答

来源:叶子的投稿【Grails 学习笔记(九)– BIRT】。

本文主要介绍Grails下Birt的安装,配置,乱码,内存溢出,日期参数的输入问题及解决方法。

一、插件安装

需要Birt-Report和Quartz两个插件

  1. 安装Quartz
    grails install-plugin quartz

    注:Quartz是Birt-Report用到的一个插件,作用是定期扫描报表目录,只要上传后,会向Report和ReportParameter表插入报表名称,路径及参数。

  2. 安装Birt-Report
    • 在线安装
      grails install-plugin birt-report

      如果在线安装有问题,可以尝试本地安装的方式

    • 本地安装

      准备工作

      birt-runtime-2_6_1.zip
      grails-birt-report-2.6.1.0.zip

      将birt-runtime-2_6_1.zip拷贝到 .grails/1.3.7/download目录,进入终端

      cp /Users/leaf/Downloads/birt-runtime-2_6_1.zip /Users/icress/.grails/1.3.7/download/

      开始安装

      grails install-plugin /Users/icress/Downloads/grails-birt-report-2.6.1.0.zip

二、配置

  1. 官方
    birt {
        reportHome = "Reports"
        engineHome = "/var/apache2/tomcat/webapps/birt/WEB-INF/platform"
        imageUrl = "images/report"
    }
    environments {
        development {
            birt.engineHome = '..\\..\\birt-2.5.0\\platform'
        }
    }
  2. 修改engineHome

    插件安装好以后,默认在workspace的目录下面,我把它移到了web-app目录下面,这样做的好处是不用单独部署birt了,可以跟着程序一起打包,而且不用区分开发还是生产环境了,但是也有个坏处,打包部署的时候,包大了许多。修改配置:

    engineHome = "birt-2.6.1/platform"

三、乱码问题

如果在开发或者部署过程中出现了乱码,可以试试下面的方法,修改ReportController

birtReportService.runAndRender(reportName, reportParams, htmlOptions)

为:

birtReportService.runAndRender(reportName, reportParams, htmlOptions).toString("UTF-8")

四、内存溢出

  1. STS-配置RUN Configurations – VM arguments
    -server
    -Xms800m
    -Xmx800m
    -XX:PermSize=64M
    -XX:MaxNewSize=256m
    -XX:MaxPermSize=256m
    -Djava.awt.headless=true
  2. Tomcat,修改configure tomcat -> java -> Java Options
    -Djava.awt.headless=true
    -Xms992M
    -Xmx992M
    -Xss1024K
    -XX:MaxPermSize=256M
    -XX:PermSize=256M

    注:tomcat plugin里面的TomcatServer.groovy中这样写的

    static DEFAULT_JVM_ARGS = ["-Xmx512m"]

    我在后面加上了上述的参数后,仍会出现内存溢出的问题,不知道为什么。

五、日期参数(JQuery & JQuery UI)

Grails自带的datepicker真的有些让人吐血啊,而且这个插件的日期参数也是有问题的,所以小弟斗胆的改一下。

  1. 修改run.gsp,将日期部分修改成下面这样
    g:textField name="${p.name}" value=""${reportParams[p.name]}
    $(function() {
        $( "#${p.name}" ).datepicker({dateFormat: 'yy-mm-dd'});
    });

    注:run.gsp获取报表参数,并生成参数填写页面,可以根据报表参数变量类型(便如string对应text,Date对应datepicker等),前面之所以会修改Datepicker,是因为Grails自带的datepicker不好用,而且Birt不能正确接收传来的参数。

  2. 修改ReportController对应的部分
    case 4: // DateTime
    case 7: // Date
        if(!params[p.name]){
            if(!p.allowBlank ){
                missing << p.name
            }
        }else{
            reportParams[p.name] = params[p.name]
        }
    break
  3. 使用JQuery和JQueryUI,原来的动画没有了,修改run.gsp
    function displayWait(){
        $('#form_pane').hide();
        $('#wait_indicator').show();
        return true;
    }
  4. 版本
    JQuery-1.6.1
    JQueryUI-1.8.13

六、结束语

以上是我在使用过程中遇到的问题及解决的方法,写下来跟大家一起分享下,希望大家能够喜欢,谢谢!

By huwh - Posted on 25 六月 2011