2005年11月26日

          最近的工作中涉及到了下載機(jī)能,在做的過程中遇到了下面一些問題。這些問題都已經(jīng)解決了,但是對策肯定不是唯一,如果大家有好的對策,愿意共通研究?;蛘咴谙螺d過程中有什么其他需要注意的問題,敬請留言。

           

          1、  下載完畢后不能夠重定向畫面。這種情況是發(fā)生在使用了frameset的畫面上。

          基本現(xiàn)象:
          點(diǎn)擊下載按鈕,下載執(zhí)行完畢后,再按其他的按鈕,會出現(xiàn)javascript錯誤,不能夠找到原來畫面中的控件。原因就是因?yàn)橄螺d完畢后不能夠重定向到原來的畫面。

          原因及對策1
          提交的時候把提交的formtarget設(shè)定為top,這樣下載完畢后,頁面能夠重定向,就不會出現(xiàn)javascript代碼語法錯誤的現(xiàn)象。同時使用這種方法能夠把下載過程中出現(xiàn)的錯誤信息顯示在原來的畫面上。此時需要注意一點(diǎn),由于提交到的是top,所以出錯返回的畫面也要是整個frame的畫面,同時還要保存原畫面用戶輸入的數(shù)據(jù),所以建議原來畫面的數(shù)據(jù)使用session來保存。
          function clickButton(){
              form.target = “_top”
              form.submit();
          }

          原因及對策2
          在當(dāng)前頁面添加一個內(nèi)禎用于下載使用,提交下載的form的時候可以把target指定到內(nèi)禎上,這樣不會影響到原來畫面,原畫面可以繼續(xù)操作。不過這種方法存在著弊端:一是很難使用javascript防止多重提交。二、如果下載過程中出現(xiàn)錯誤,顯示錯誤信息比較麻煩。鑒于上述兩種弊端使用這種方法一般是提交兩次,第一次正常提交把要下載的數(shù)據(jù)準(zhǔn)備好,保證下載能夠正常進(jìn)行,對于出錯的處理也是在這一次進(jìn)行的;第二次提交是提交到內(nèi)禎,此次提交只是進(jìn)行下載直接,不考慮會出現(xiàn)錯誤。這次提交是在onload中執(zhí)行的。
            <iframe name="download" style=” visibility:hidden”/>
          提交的時候使用下面的javascript
          function clickButton(){
              form.target = “download”;
              form.submit();
          }

          2、  不正常的下載現(xiàn)象。
          現(xiàn)象1
          windows2000操作系統(tǒng)下,有時候點(diǎn)擊下載,彈出下載對話框后點(diǎn)擊打開,會再次彈出打開對話框。

          原因及對策:
          這可能是IE的安全設(shè)定產(chǎn)生的問題,如果要解決這個問題,也有辦法。我在反復(fù)的試驗(yàn)中發(fā)現(xiàn),出現(xiàn)這種現(xiàn)象的時候,提交下載的form中的數(shù)據(jù)在server端被用到,此時就會出現(xiàn)彈出兩次對話框的現(xiàn)象,如果沒有form中沒有數(shù)據(jù)或者form中的數(shù)據(jù)在server端不會被使用,那么就不會有這種現(xiàn)象,所以downloadform可以設(shè)定一個空的form。(如果考慮到netscape瀏覽器,form里面還要放上一個hidden控件,否則netscapeform提交不了。)這樣這種現(xiàn)象就不會出現(xiàn)了。
          <form name=”mainForm”>
             <input type=”button” name=”download” onclick=”clickButton()”>
          </form>
          <form name=”downLoadForm”>
             <input type=”hidden” name=”noUsed” />
          </form>
          使用的javascript如下:
          function clickButton(){
             downLoadForm.submit();
          }

          現(xiàn)象2
          windowsXP下,有時候下載會導(dǎo)致彈出安全制御的提示條。

          原因及對策:
          我所遇到的這樣的問題產(chǎn)生的原因是,我是用了1中的對策2,在準(zhǔn)備完畢數(shù)據(jù)后,在onload方法中執(zhí)行了提交到內(nèi)禎的下載操作,結(jié)果出現(xiàn)了安全的提示條(頁面最上端)。對策方法就是不在onload提交下載的操作。

           

          3、  有關(guān)下載的性能問題。

          如果下載的是固定的文件一般不會有問題,我們可以通過File類的方法得到文件的長度,然后分次寫入到流就可以了。但是有時候下載的內(nèi)容可能動態(tài)組成的,比如說從數(shù)據(jù)庫檢索出來的等。在這種情況下,如果先從數(shù)據(jù)庫中檢索出所有的數(shù)據(jù),然后在把數(shù)據(jù)按照下載的格式編輯出來,最后再算出長度分次寫入到流中,性能肯定不高。為了提交性能,我們可以這樣做,一次編輯一定數(shù)目的記錄,然后就向流中寫入,這樣也是分次的寫入到流中。在這種方式下,用戶能夠盡快看到下載的對話框,減少等待時間,同時也減少了下載過程中內(nèi)存的使用量,提高了下載的性能。

           

          上面三個問題是我在使用struts框架做下載功能時遇到的一些問題,以及自己的一些對策,供大家參考如果大家有更好的解決辦法,請賜教。

          posted @ 2005-11-26 12:43 尋覓 閱讀(410) | 評論 (0)編輯 收藏

          2005年11月10日

                  今天是第一次來到BlogJava這個博客網(wǎng)站,也是第一次正式的注冊博客,希望在這個網(wǎng)站里面能夠結(jié)交一些朋友,也希望自己的寫的東西對大家能夠有所幫助。
                   我是一名程序員,主要是作Java方面開發(fā)的,喜歡學(xué)習(xí)Java方面的技術(shù),為了能夠使自己能夠更好的掌握J(rèn)ava方面的知識,我想通過博客把自己學(xué)習(xí)的一些想法記錄下來,和各位交流一下,共同提高嘛!先謝謝諸位朋友了,以后還希望能夠經(jīng)常光顧我的博客,給出建議。
          posted @ 2005-11-10 23:57 尋覓 閱讀(210) | 評論 (1)編輯 收藏
          僅列出標(biāo)題  

          統(tǒng)計(jì)

          主站蜘蛛池模板: 贵州省| 阿拉尔市| 吉首市| 泾阳县| 上饶县| 和田市| 嵊泗县| 英吉沙县| 呼伦贝尔市| 长阳| 长宁区| 建湖县| 贡山| 黔东| 顺平县| 静宁县| 商都县| 吐鲁番市| 噶尔县| 巨野县| 福清市| 务川| 文登市| 双鸭山市| 井陉县| 名山县| 新乐市| 永新县| 边坝县| 交口县| 宝兴县| 岚皋县| 高平市| 贵溪市| 衡南县| 黄平县| 游戏| 阳城县| 泽州县| 肥乡县| 伊宁县|