2017-05-29 18 views
1

我的頁面上有一個表單上傳組件,並且希望在完成文件上載並更新頁面後在JavaScript中執行更多操作。從不會調用Primefaces組件fileUpload的完成

我把簡單的日誌語句來測試「oncomplete」執行,但它從來沒有發生。 已成功上傳文件並更新了頁面的其他部分,但未執行「未完成」操作。 這裏是我的組件:

<p:fileUpload id="objectUpload1" 
       fileUploadListener="#{importBackingBean.handleFileUpload}" 
       mode="advanced" dragDropSupport="true" 
       invalidFileMessage="Недопустимый тип файла" 
       invalidSizeMessage="Размер файла превышает 5 МВ" 
       cancelLabel="#{msg['stop_LABEL']}" 
       uploadLabel="#{msg['Upload_LABEL']}" 
       label="#{msg['Choose_LABEL']}" update="results objects_Data" 
       sizeLimit="5000000" allowTypes="/(\.|\/)(xlsx|xls)$/" 
       oncomplete="load();" /> 

而且我的javascript:

<script type="text/javascript"> 
       function load() { 
        console.log('File Uploaded!'); 
        $("button[id*='load']").click(); 
       }      
</script> 

按鈕:

<p:commandButton value="Загрузить полисы"     
       oncomplete="#{importModelBean.needToLoadMore ? 'load();' :'none();'}" 
       id="load" 
       action="#{importBackingBean.loadOneRow(importModelBean.current)}" 
       process="@this" update="mainViewForm:objects_Data" /> 

當我手動點擊按鈕,它工作得很好。但沒有得到與filepload oncomplete點擊。

+0

我手頭沒有任何文檔,但是您確定'oncomplete'是否支持這樣? – Kukeltje

+0

@Kukeltje - 是的,在Primefaces中fileUpload支持oncomplete。這裏是[文檔](https://www.primefaces.org/docs/vdl/4.0/primefaces-p/fileUpload.html) –

+0

我知道文檔的位置;-) juat not goung訪問幾MB大檔案在我的手機上...將在稍後在家中檢查 – Kukeltje

回答

1

使用給出的代碼,我已經複製了這種情況。雖然$("button[id*='load']").click();已被正確調用,但沒有顯示日誌。我猜測,編號爲load的按鈕設置爲ajax=」false」。如果這是真的,那麼我認爲該消息在調用console.log('File Uploaded!');那一刻被記錄下來,但在加載按鈕處理後頁面被更新後被清除。你需要日誌的東西嗎?如果沒有,只需刪除console.log('File Uploaded!');代碼,它應該工作得很好。

編輯:

我誤解你了。我認爲你的擔心是消息沒有記錄在控制檯中。

我已經在兩個項目上測試過你的代碼(在兩臺不同的計算機上運行),我無法重現你的問題。

項目1:
Primefaces 6.0
JSF 2.0
爲8.5
IE 11

項目2:
Primefaces 5.x的
JSF 2.0
Glassfish的4.1
谷歌瀏覽器

我甚至試過oncomplete=」alert(‘hello!’)」它工作得很好。

我認爲問題在別的地方。 對於平均時間,你可以試試下面的代碼,看看它的工作原理:

<p:fileUpload id="objectUpload1" 
       fileUploadListener="#{importBackingBean.handleFileUpload}" 
       mode="advanced" dragDropSupport="true" 
       invalidFileMessage="Недопустимый тип файла" 
       invalidSizeMessage="Размер файла превышает 5 МВ" 
       cancelLabel="#{msg['stop_LABEL']}" 
       uploadLabel="#{msg['Upload_LABEL']}" 
       label="#{msg['Choose_LABEL']}" update="results objects_Data" 
       sizeLimit="5000000" allowTypes="/(\.|\/)(xlsx|xls)$/" 
       oncomplete="rc()" /> 

<p:remoteCommand name="rc"     
       oncomplete="#{importModelBean.needToLoadMore ? 'load();' :'none();'}" 
       action="#{importBackingBean.loadOneRow(importModelBean.current)}" 
       process="@this" update="mainViewForm:objects_Data" /> 

更多有關p:remoteCommand,請參閱primefaces展示RemoteCommand

+0

文件上傳後僅更新兩個塊(結果和objects_Data),而不是整個頁面。 Button是p:commandButton - 所以Ajax默認爲true,我不會將它設置爲false(代碼示例已更新)。如果我手動點擊它,按鈕可以工作,但不能用oncomplete。 –

+0

我的評論太長了,所以我編輯了我以前的回答。請參閱編輯:部分。 – Tonkichi

相關問題