【轉載】解決有關Ext Grid導出Excel在JSP等環(huán)境中不可用的問題
Posted on 2009-02-11 13:31 tangtb 閱讀(4723) 評論(7) 編輯 收藏 所屬分類: ExtJs 解決有關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í)行的代碼如下:

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

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)代碼:

2

3

4

5

6

7

8

9

10

11

12

13

14

JSP代碼:

2

3

4

5

6

完整代碼下載:grid2excel.rar