2014-03-28 31 views

回答

9

由於多文件上傳組件是jQuery-File-Upload插件,因此默認狀態不是順序,這意味着所有的文件異步上傳。

要獲取組件做了連續的上傳,你必須設置sequentialUploads爲真,並改變我們當前的文件的一個小字母排序。所有這些都是通過javascript完成的。

假設你widgetVar是fileUploadWV

<p:fileUpload widgetVar="fileUploadWV" 
       fileUploadListener="#{attachmentBean.onUpload}" /> 

<script> 
    $(function() { 
     // setTimeout waits till the widgetVar is ready! 
     setTimeout(sortFileUpload, 2000); 
    }); 

    function sortFileUpload() { 
     //Set this option to true to issue all file upload requests in a sequential order instead of simultaneous requests. 
     PF('fileUploadWV').jq.data().blueimpFileupload.options.sequentialUploads = true; 

     //every time a new file is added, sort the files based on name 
     PF('fileUploadWV').jq.change(function() { 
      PF('fileUploadWV').files.sort(function fileSort(a, b) { 
      return a.name.localeCompare(b.name) 
      }) 
     }); 
    } 
</script> 

因此,在這種情況下您的文件將在按字母順序排列得到上傳。

注意:如果您未將sequentialUploads設置爲true,則無法控制將首先發送哪個文件。

GithubOnline Demo

enter image description here

希望這有助於。

+0

我試過這樣做,它工作(當涉及到執行順序請求),但最終的結果只有一個文件實際上傳(由'fileUploadListener'處理)。你有任何建議調用所有'fileUploadListener'嗎? – nuno

+0

此外,它似乎變成了一個功能https://github.com/primefaces/primefaces/issues/403 – nuno

+0

@nuno我沒有完全明白你的意思。我發佈的答案已經過多次上傳的測試,並且每個文件的監聽者都被調用了,也許別的東西不適合你? –

1

肯定的,但這種方法是不是很優雅:

<p:remoteCommand action="#{attachmentBean.processAttachments}" 
    name="processAttachments" update="attachmentTable"/> 

<p:fileUpload fileUploadListener="#{attachmentBean.onUpload}" 
    oncomplete="processAttachments()" /> 

attachmentBean.onUpload存儲列表中的每個文件/地圖/ SortedMap的 attachmentBean.processAttachments最終排序該列表/地圖和進程附件爲了

attachmentBean必須至少爲@ViewScoped

相關問題