<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    tangtb

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

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

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

    實(shí)現(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: 【轉(zhuǎn)載】解決有關(guān)Ext Grid導(dǎo)出Excel在JSP等環(huán)境中不可用的問題  回復(fù)  更多評論   

    2009-03-25 18:29 by e不
    我在ASP環(huán)境下
    報(bào)錯(cuò)
    《%
    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: 【轉(zhuǎn)載】解決有關(guān)Ext Grid導(dǎo)出Excel在JSP等環(huán)境中不可用的問題[未登錄]  回復(fù)  更多評論   

    2009-05-22 11:26 by 111
    你相當(dāng)厲害了 恭喜啊

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

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

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

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

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

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

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

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

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

    2012-04-17 13:24 by abc
    @麟崖
    ie8下不能導(dǎo)出你怎么解決的
    主站蜘蛛池模板: 无码 免费 国产在线观看91| 国产免费牲交视频| 四虎国产精品永免费| 亚洲人色大成年网站在线观看| 亚洲情综合五月天| 免费一级毛片在线播放| 成人免费激情视频| 亚洲欧洲免费视频| 国产福利电影一区二区三区,免费久久久久久久精| 亚洲人成免费网站| 久久亚洲精品人成综合网| 亚洲日韩精品A∨片无码| 免费欧洲美女牲交视频| 好男人视频在线观看免费看片| 永久在线免费观看| 久久青草国产免费观看| a级毛片在线视频免费观看 | 成人片黄网站A毛片免费| 中文字幕视频免费| 久久狠狠躁免费观看2020| 二区久久国产乱子伦免费精品| 全部一级一级毛片免费看| 国产精品手机在线亚洲| 亚洲av无码专区青青草原| 亚洲精品宾馆在线精品酒店| 亚洲国产成人精品无码区二本| 亚洲va成无码人在线观看| 亚洲国产日韩在线| 亚洲日产2021三区| 激情内射亚洲一区二区三区| 亚洲色图在线观看| 1区1区3区4区产品亚洲| 亚洲天堂一区二区三区四区| 亚洲国产精品成人精品软件 | 久9这里精品免费视频| 国偷自产一区二区免费视频| 在线免费观看h片| 久久久久久成人毛片免费看| 香蕉免费一区二区三区| 暖暖日本免费中文字幕| 一级毛片在线免费观看|