ext导出excel JAVA_【转载】解决有关Ext Grid导出Excel在JSP等环境中不可用的问题

解决有关Ext Grid导出Excel在JSP等环境中不可用的问题

有关ExtGrid导出Excel的实现方式,网上已经有很多,官方也给出了一个方案,代码不是很完善,不过已经有高人对这个进行了修正。具体实现方式及代码我这里就不再多说了,大家可以参看:

http://www.dojochina.com/index.php?q=node/1254,附件:gridToExcel.js.txt

其基本思想是:客户端根据Grid数据生成Excel格式的XML数据,然后发送到一个服务端文件,服务端文件通

过设定Content-Type来实现Excel的下载。其中“导出Excel”按钮点击执行的代码如下:

1

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifif(Ext.isIE6||Ext.isIE7||Ext.isSafari||Ext.isSafari2||Ext.isSafari3)9b8a8a44dd1c74ae49c20a7cd451974e.png{297e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifif(!Ext.fly('frmDummy'))9b8a8a44dd1c74ae49c20a7cd451974e.png{3d18c02628675d0a2c816449d98bda930.pngvarfrm=document.createElement('form');4d18c02628675d0a2c816449d98bda930.png        frm.id='frmDummy';5d18c02628675d0a2c816449d98bda930.png        frm.name=id;6d18c02628675d0a2c816449d98bda930.png        frm.className='x-hidden';7d18c02628675d0a2c816449d98bda930.png        document.body.appendChild(frm);8ecedf933ec37d714bd4c2545da43add2.png    }997e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif    Ext.Ajax.request(9b8a8a44dd1c74ae49c20a7cd451974e.png{10d18c02628675d0a2c816449d98bda930.png        url: '/exportexcel.php',11d18c02628675d0a2c816449d98bda930.png        method: 'POST',12d18c02628675d0a2c816449d98bda930.png        form: Ext.fly('frmDummy'),1397e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif        callback:function(o, s, r)9b8a8a44dd1c74ae49c20a7cd451974e.png{14d18c02628675d0a2c816449d98bda930.png//alert(r.responseText);15ecedf933ec37d714bd4c2545da43add2.png},16d18c02628675d0a2c816449d98bda930.png        isUpload:true,1797e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif        params:9b8a8a44dd1c74ae49c20a7cd451974e.png{exportContent: vExportContent}18ecedf933ec37d714bd4c2545da43add2.png    })191fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif}else9b8a8a44dd1c74ae49c20a7cd451974e.png{20d18c02628675d0a2c816449d98bda930.png    document.location='data:application/vnd.ms-excel;base64,'+Base64.encode(vExportContent);218f1ba5b45633e9678d1db480c16cae3f.png}

例子中服务端使用的PHP,这段代码在PHP中可能可以很好的工作,但是如果到了JSP等环境下,就出现了问

题,导出数据可能是空。

问题出在哪里呢?上面这部分代码中的ajax提交其实并不是真正的ajax提交,因为ajax提交是在后台执行,因

此不可能实现下载,可以看到这里有form和isUpload两个参数:Ext的ajax请求中如果配置了isUpload:true,则其

ajax就不是真正的ajax请求,而是通过创建一个隐藏的Iframe,并通过form的target指向这个iframe来提交数据,并

且发送的header里将content-type设为了multipart/form,在JSP中不能成功导出的原因就在这里。这样的提交方式

其参数通过request.getParameter是取不到的,当然你可以使用上传组件来获取,但这样代码就变得复杂。下面

来解决这个问题,既然这里的Ajax使用是一个模拟的form提交,那我们其实可以完全不用。我们直接用form提

交不是更省事吗?解决办法如下:创建一个隐藏form,其target设置为_blank,然后在其内部创建一个隐藏域存

放xml数据,然后通过POST方式提交这个form即可。

实现代码:

1

4f1150b881333f12a311ae9ef34da474.pngvarvExportContent=grid.getExcelXml();21fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifif(Ext.isIE6||Ext.isIE7||Ext.isSafari||Ext.isSafari2||Ext.isSafari3)9b8a8a44dd1c74ae49c20a7cd451974e.png{3d18c02628675d0a2c816449d98bda930.pngvarfd=Ext.get('frmDummy');497e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifif(!fd)9b8a8a44dd1c74ae49c20a7cd451974e.png{597e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif        fd=Ext.DomHelper.append(Ext.getBody(),9b8a8a44dd1c74ae49c20a7cd451974e.png{tag:'form',method:'post',id:'frmDummy',action:'exportexcel.jsp', target:'_blank',name:'frmDummy',cls:'x-hidden',cn:[697e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif9b8a8a44dd1c74ae49c20a7cd451974e.png{tag:'input',name:'exportContent',id:'exportContent',type:'hidden'}7ecedf933ec37d714bd4c2545da43add2.png        ]},true);8ecedf933ec37d714bd4c2545da43add2.png    }997e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gif    fd.child('#exportContent').set(9b8a8a44dd1c74ae49c20a7cd451974e.png{value:vExportContent});10d18c02628675d0a2c816449d98bda930.png    fd.dom.submit();111fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gif}else9b8a8a44dd1c74ae49c20a7cd451974e.png{12d18c02628675d0a2c816449d98bda930.png    document.location='data:application/vnd.ms-excel;base64,'+Base64.encode(vExportContent);138f1ba5b45633e9678d1db480c16cae3f.png}}144f1150b881333f12a311ae9ef34da474.png

JSP代码:

1

4f1150b881333f12a311ae9ef34da474.pngresponse.setHeader("Content-Type","application/force-download");34f1150b881333f12a311ae9ef34da474.pngresponse.setHeader("Content-Type","application/vnd.ms-excel");44f1150b881333f12a311ae9ef34da474.pngresponse.setHeader("Content-Disposition","attachment;filename=export.xls");54f1150b881333f12a311ae9ef34da474.pngout.print(request.getParameter("exportContent"));64f1150b881333f12a311ae9ef34da474.png%>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值