如何实现基于Web2.0的BIRT Viewer应用

BIRT Viewer是一个基于web/ajax/J2EE的简单实用,带有示例性质的BIRT报表预览器。但我们在实际的项目整合中,往往都需要对它进行必要的功能上的扩充。其中,有一个很典型的应用,就是如何实现类似Google Map API哪样的功能,将报表灵活方便的插入到实际应用的页面上。这样可以非常方便的将报表服务与其它应用完全分离开来,在逻辑上和物理上都可以不再需要整合在一起。这样,我们完全可以在基于ASP/PHP或其它非J2EE应用中插入报表内容。BIRT Viewer中并没有提供相关的JS库,但商业化产品Actuate10中已提供了相关的JS库,可以很方便灵活布署报表应用。

我们知道,基于ajax的应用都有一个很大的硬伤,就是浏览器Cross Domain跨域的问题,网上也有很多种的解决方案。总的来说,无怪忽就这几种:

1) 采用按需(On-Demand)Javascript脚本。也就是利用<script>的src属性,可以动态生成src指向别的网址,从而获取返回的Javascript脚本,一般都返回JSON的消息。这种方式比较麻烦,特别是复杂的应用,需要server端更多的支持。

2) 采用Ajax扩展,也就是类似Proxy代理机制。在同一域的服务器端建一个Ajax Proxy代理,浏览器直接向该代理发送请求,然后由该Ajax代理向其它域的服务器发请求,得到回复后经处理(或原封不动)发回到浏览器端。这种解决方案笔者认为是最好的,也是最成熟可用的。网上也有一些这方面的实现可以参考,这里有一个笔者一直在采用的,大家可以研究一下:[url]http://beyrent.net/2007/01/25/ajax-extended/[/url]。该实现最大的问题就是只提供了基于PHP的实现,如果大家采用J2EE,需要自已去将PHP转为J2EE的实现。稍微有点麻烦。

3) 采用iframe的所谓坑道技术。在一个页面中,动态或直接插入一个指入它域的iframe,两个网页通过改变对方的ahchor hash fragment(...#hash)来传输数据。因为改变一个网页的anchor hash fragment值,并不会使浏览器重载,也不会改变当前浏览器状态。我们就可以引入一个定时器,定时对anchor hash的变化进行监测,从而响应相关的操作。这种办法最简单,改动的代码量相对来说是最小的。但相应的问题也很多,首先引入iframe就有安全方面的问题,很多浏览器有限制;另外通过URL的方式传数据,有长度的限制,一般不超过2048字节;还有就是效率的问题,采用timer定时器,效率的问题会很突出。虽然有这样哪样的问题,但不失一种特别的解决方案。笔者也对此做过较深入的研究。

附件里的实现就是采用第三种方式,代码比较简单,也很粗,希望能给大家有所帮助。还有如果要实现交互的功能,请大家自已修改服务器端的JS代码(^_^),如showParameterDialog等等操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值