关于birt 报表结合 web项目,采用script数据源的问题

问题是关于birt报表结合web项目,采用script数据源的问题。因为我其中一个报表采用数据库的数据源时,在jsp页面上是显示正常的。所以我想我整合后的web项目配置上... 问题是关于birt 报表结合 web项目,采用script数据源的问题。因为我其中一个报表采用数据库的数据源时,在jsp页面上是显示正常的。所以我想我整合后的web项目配置上应该是没问题的。

关键是我采用script数据源时,我按照教程先写好服务类,然后在 datasets 那边写好脚本,调用写好的服务类之后,点击预览 报表,这是可以正常显示的。但是当我run报表时,报表一直出不来,但是也没有报错,就是感觉一直在加载,想当长一段时间后,控制台 报 java.lang.OutOfMemoryError: Java heap space 异常,这我没搞懂,不过我想应该是我的报表文件是放在web项目的webapp下的,项目没启动,所以找不到script脚本里写的类。但是为什么我预览时显示正常呢

然后就算启动项目,运行这个报表时,页面也是一直在加载,最后出错,还是上面那个异常。我试了网上的方法,把那些服务类打包好放在D:\software\eclipse\plugins\org.eclipse.birt.report.viewer_4.3.2.v201402141300\birt\WEB-INF\lib 之类的地方,可惜还是没用,求助啊啊啊。。。
其实这个问题我又解决了,但是我又遇到一个新的问题。想死的心都有了。。。
这个问题就是: 我上面提到过,我有些地方有一些html 与 javascript ,这些是在text标签里弄的 ,如下图。

这样,我在预览和嵌套进jsp页面时可以正常显示。如下图:

但是我打印出来之后,这些内容都没有了。如下图:

表现为这些应该有html元素的地方一片空白。。。附上我打印的url:
function expPDF() {
window.open("/reportWeb222/frameset?__report=preapply.rptdesign&sample=my+parameter&__masterpage=true&__format=pdf&_title='分组报表'");
}

这应该是最后一个问题了,谢谢您的关注。@yashiro_w
展开
 我来答
yashiro_w
2014-08-06 · TA获得超过247个赞
知道小有建树答主
回答量:240
采纳率:0%
帮助的人:155万
展开全部
我4月份刚开发完了一个BIRT项目。我也用的是BIRT 4.2,然后我有很多birt报表用的也是script datasource。

你用的什么服务器?我用的tomcat和jboss,两个都可以顺利跑在windows和linux环境,绝对没有java heap space。

1.首先你的服务类,就是从数据库读数据的java class绝对不应该放在WEB-INF\lib下面。你apps打包打得对吗?

2.至于你的页面跑不出来,我想问数据量多少?在sql里面跑那个query要用多久?

3.你留个邮箱我可以给你例子。
更多追问追答
追问
上面这个问题已经解决了,目前遇到一个新问题,还请指点。报表有些地方插入动态文本,里面是一些html的元素(比如input之类的)和一些javascript,然后我想在通过那些js获取到脚本数据源中定义的一些数据该怎么弄呢?谢谢
追答
按照你的说法,你的报表里面插入了动态文本和一些js,想显示数据源里面的值。正常的话,在eclipse的birt那个配置窗口里面,你可以看到左下角窗口里面有个数据源datasource,找到映射,然后拖动到.rptdesign文件里就行。我记得.rptdesign文件里面就显示貌似[$foo]这样的东西。

然后你定义js里面试试引用这个他生成的tag。

不过我猜你这个需求,在birt里面很可能不好用,因为birt4.2 eclipse里面那个开发界面实在是太差了,全是bug。

其实birt就是一个js插件的应用,具体哪个js是什么名字我记不清楚了。

http://www.eclipse.org/birt/documentation/integrating/scripting.php

你可以参考上面这个,里面有个birt工作的流程图,就是说你的rptdesign模版在被编译的时候,浏览器中有没有call到你定义js数据源的方法。我的意思是,你试试放在beforeOpen()或者beforeRender()不同的方法里面。
-------
不过我当时的做法就是,不要跟我自己过不去。所有数据源尽量都在java servlet里面call完,然后把整理好的数据全放到birt session里面,然后再servlet去run这个birt报表。大家既然已经知道birt很哇塞,根本不怎么好用,那就不用他去call 数据源,call数据源都在servlet里面做完,只用birt去显示数据。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式