tangtb

          Hadoop,SpringMVC,ExtJs,Struts2,Spring,SpringSecurity,Hibernate,Struts
          posts - 25, comments - 88, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

                                                   解決有關Ext Grid導出Excel在JSP等環(huán)境中不可用的問題
                  有關ExtGrid導出Excel的實現(xiàn)方式,網(wǎng)上已經(jīng)有很多,官方也給出了一個方案,代碼不是很完善,不過已經(jīng)有高人對這個進行了修正。具體實現(xiàn)方式及代碼我這里就不再多說了,大家可以參看:
          http://www.dojochina.com/index.php?q=node/1254,附件:gridToExcel.js.txt
          其基本思想是:客戶端根據(jù)Grid數(shù)據(jù)生成Excel格式的XML數(shù)據(jù),然后發(fā)送到一個服務端文件,服務端文件通
          過設定Content-Type來實現(xiàn)Excel的下載。其中“導出Excel”按鈕點擊執(zhí)行的代碼如下:

           1if (Ext.isIE6 || Ext.isIE7 || Ext.isSafari || Ext.isSafari2 || Ext.isSafari3) 
           2    if (! Ext.fly('frmDummy')) 
           3        var frm = document.createElement('form'); 
           4        frm.id = 'frmDummy'; 
           5        frm.name = id; 
           6        frm.className = 'x-hidden'; 
           7        document.body.appendChild(frm); 
           8    }
           
           9    Ext.Ajax.request(
          10        url: '/exportexcel.php', 
          11        method: 'POST', 
          12        form: Ext.fly('frmDummy'), 
          13        callback: function(o, s, r) 
          14            //alert(r.responseText); 
          15        }

          16        isUpload: true
          17        params: {exportContent: vExportContent} 
          18    }

          19}
           else 
          20    document.location = 'data:application/vnd.ms-excel;base64,' + Base64.encode(vExportContent); 
          21}

          例子中服務端使用的PHP,這段代碼在PHP中可能可以很好的工作,但是如果到了JSP等環(huán)境下,就出現(xiàn)了問
          題,導出數(shù)據(jù)可能是空。
           問題出在哪里呢?上面這部分代碼中的ajax提交其實并不是真正的ajax提交,因為ajax提交是在后臺執(zhí)行,因
          此不可能實現(xiàn)下載,可以看到這里有form和isUpload兩個參數(shù):Ext的ajax請求中如果配置了isUpload:true,則其
          ajax就不是真正的ajax請求,而是通過創(chuàng)建一個隱藏的Iframe,并通過form的target指向這個iframe來提交數(shù)據(jù),并
          且發(fā)送的header里將content-type設為了multipart/form,在JSP中不能成功導出的原因就在這里。這樣的提交方式
          其參數(shù)通過request.getParameter是取不到的,當然你可以使用上傳組件來獲取,但這樣代碼就變得復雜。下面
          來解決這個問題,既然這里的Ajax使用是一個模擬的form提交,那我們其實可以完全不用。我們直接用form提
          交不是更省事嗎?解決辦法如下:創(chuàng)建一個隱藏form,其target設置為_blank,然后在其內(nèi)部創(chuàng)建一個隱藏域存
          放xml數(shù)據(jù),然后通過POST方式提交這個form即可。

          實現(xiàn)代碼:

           1var vExportContent = grid.getExcelXml(); 
           2if (Ext.isIE6 || Ext.isIE7 || Ext.isSafari || Ext.isSafari2 || Ext.isSafari3) 
           3    var fd=Ext.get('frmDummy'); 
           4    if (!fd) 
           5        fd=Ext.DomHelper.append(Ext.getBody(),{tag:'form',method:'post',id:'frmDummy',action:'exportexcel.jsp', target:'_blank',name:'frmDummy',cls:'x-hidden',cn:[ 
           6            {tag:'input',name:'exportContent',id:'exportContent',type:'hidden'} 
           7        ]}
          ,true); 
           8    }
           
           9    fd.child('#exportContent').set({value:vExportContent}); 
          10    fd.dom.submit(); 
          11}
           else 
          12    document.location = 'data:application/vnd.ms-excel;base64,'+Base64.encode(vExportContent); 
          13}

          14

          JSP代碼:

          1<%  
          2response.setHeader("Content-Type","application/force-download"); 
          3response.setHeader("Content-Type","application/vnd.ms-excel"); 
          4response.setHeader("Content-Disposition","attachment;filename=export.xls"); 
          5out.print(request.getParameter("exportContent")); 
          6%>


           完整代碼下載:grid2excel.rar


          評論

          # re: 【轉載】解決有關Ext Grid導出Excel在JSP等環(huán)境中不可用的問題  回復  更多評論   

          2009-03-25 18:29 by e不
          我在ASP環(huán)境下
          報錯
          《%
          Response.AddHeader "ContentType", "application/force-download"
          Response.AddHeader "ContentType", "application/vnd.ms-excel"
          Response.AddHeader "Content-Disposition","attachment;filename=export.xls"
          Response.Write Request.Form("exportContent")
          %>

          QQ:106716940

          # re: 【轉載】解決有關Ext Grid導出Excel在JSP等環(huán)境中不可用的問題[未登錄]  回復  更多評論   

          2009-05-22 11:26 by 111
          你相當厲害了 恭喜啊

          # re: 【轉載】解決有關Ext Grid導出Excel在JSP等環(huán)境中不可用的問題  回復  更多評論   

          2009-07-09 15:21 by ext
          分頁的就用不了。。。。。。。
          如果可以解決。。
          請加下我qq:32963797

          # re: 【轉載】解決有關Ext Grid導出Excel在JSP等環(huán)境中不可用的問題[未登錄]  回復  更多評論   

          2010-01-15 23:46 by Lee
          好厲害! thx

          # re: 【轉載】解決有關Ext Grid導出Excel在JSP等環(huán)境中不可用的問題  回復  更多評論   

          2012-02-28 17:36 by 麟崖
          你好,我在firefox測試可以使用,IE8下面無法正常使用,添加"Ext.IE8||"后產(chǎn)生的xls文件為空,請問是否知道是什么原因產(chǎn)生的呢

          # re: 【轉載】解決有關Ext Grid導出Excel在JSP等環(huán)境中不可用的問題  回復  更多評論   

          2012-02-28 18:54 by 麟崖
          謝謝,我已經(jīng)解決了,是JSP的問題

          # re: 【轉載】解決有關Ext Grid導出Excel在JSP等環(huán)境中不可用的問題[未登錄]  回復  更多評論   

          2012-04-17 13:24 by abc
          @麟崖
          ie8下不能導出你怎么解決的
          主站蜘蛛池模板: 都江堰市| 任丘市| 民丰县| 汕头市| 平阳县| 新丰县| 芷江| 兴国县| 金塔县| 连云港市| 东阳市| 寿宁县| 鹰潭市| 岢岚县| 宁海县| 清水河县| 大田县| 乌海市| 尚义县| 乌兰察布市| 绥中县| 舞钢市| 洮南市| 鄯善县| 岳阳县| 三门县| 蒲城县| 周宁县| 东港市| 孟州市| 孝义市| 安阳县| 枣强县| 建瓯市| 三台县| 阿拉尔市| 芜湖县| 淮北市| 潢川县| 隆回县| 平武县|