我對PrimeFaces組件非常陌生。我有一個FileUpload(多個文件上傳),我想知道是否有方法可以知道上傳組件上傳組件之前有多少個文件。 我需要的是上傳1到6個文件,並在第6次上傳後處理所有文件。 任何想法,我怎麼能實現這一點非常受歡迎。PrimeFaces FileUpload中的文件數
乾杯
UPDATE 與oncomplete
已經嘗試過,但它並不能幫助我,因爲執行該事件的每一個文件上傳不是時間「,直到所有文件都。
我對PrimeFaces組件非常陌生。我有一個FileUpload(多個文件上傳),我想知道是否有方法可以知道上傳組件上傳組件之前有多少個文件。 我需要的是上傳1到6個文件,並在第6次上傳後處理所有文件。 任何想法,我怎麼能實現這一點非常受歡迎。PrimeFaces FileUpload中的文件數
乾杯
UPDATE 與oncomplete
已經嘗試過,但它並不能幫助我,因爲執行該事件的每一個文件上傳不是時間「,直到所有文件都。
如果您想要一次上傳所有文件或一次只上傳1個文件,然後調用處理消息,則必須創建一個變量或更好的list
,您可以在其中插入每個文件的名稱文件,甚至是文件對象,當ArrayList大小達到6時,您可以調用處理方法。就那麼簡單!
private ArrayList<UploadedFile> listWithUploadedFile = new ArrayList<UploadedFile>();
public void uploadMethod(){
//upload file, save input stream and any other thing you want
listWithUploadedFile.add(file);
if(listWithUploadedFile.size==6){
myProcessUploadedFilesMethod();
}
}
那麼這樣做,但問題是如何使動態,因爲用戶有時會上傳6個文件,有時1個文件,有時3個文件...我想知道有多少文件將上傳,甚至更好的我想知道何時上傳所有文件。所以當用戶選擇3個文件時,只要第三個文件完全上傳時就設置了一個標誌 – BRabbit27 2011-12-21 15:43:40
@ BRabbit27我想你完全知道用戶應該上傳的所有文件,如果你不知道你不能使用屬性' sizeLimit'因爲你永遠不知道......用戶現在可以上傳4,5,6個文件,並在一分鐘後上傳另一個文件;有兩件事你可以做:實現一個按鈕,例如'完成上傳文件',按下按鈕後,你可以調用處理方法(ajax或非ajax),或者你可以實現一個JavaScript函數(或使用RequestContext對象),如果之後的話,禁用上傳標籤(甚至隱藏它),5分鐘,沒有文件上傳 – spauny 2011-12-21 15:51:52
是啊,謝謝!我想我會再放一個按鈕來表示上傳已完成。我只是想知道是否有辦法知道上傳了多少文件。是否有可能知道何時上傳所有文件?我的意思是像'oncomplete'事件,但這會觸發每個文件,是否有整個上傳事件(所有文件上傳後)? – BRabbit27 2011-12-21 16:05:26
好吧,這是相當古老的線程,但我發現straitforward方式來確定上傳文件的數量。
p:fileUpload
小部件有一個關於選定文件的meta-info數組。通過將這個數組的長度傳遞給你的bean,你將獲得文件的總數。
有但一個問題:p:fileUpload
不提交周圍的形式,所以我不得不把隱形按鈕與一起傳遞從JavaScript文件的數量ManagedBean:
<h:form id="importDlgForm">
<p:fileUpload id="importFile" widgetVar="importFile" fileUploadListener="#{importDialogView.importFile}"
mode="advanced" multiple="true"
onstart="$('#importDlgForm\\:file_number_input').val(PF('importFile').files.length);
$('#importDlgForm\\:submit_btn').click();"/>
<h:inputHidden id="file_number_input" value="#{importDialogView.importFileNumber}"/>
<p:commandButton id="submit_btn" style="display: none"/>
</h:form>
我也必須使用AtomicInteger
才能跟蹤處理的文件,因爲默認情況下p:fileUpload
使用多個線程上傳文件。
private final AtomicInteger atomicImportFileNumber = new AtomicInteger();
private Integer importFileNumber;
public Integer getImportFileNumber() {
return importFileNumber;
}
public void setImportFileNumber(Integer importFileNumber) {
this.importFileNumber = importFileNumber;
atomicImportFileNumber.set(importFileNumber);
}
public void importFile(FileUploadEvent event) {
// common file upload stuff
if (atomicImportFileNumber.decrementAndGet() == 0) {
// part to execute only when all files have been uploaded
}
}
我真的不明白一件事:你希望能夠上傳各6分檔的,所以實際上上傳,然後調用的處理方法?還是隻有在所有6個文件都處於上傳狀態後才真正開始上傳? – spauny 2011-12-21 06:26:24
將它們全部上傳,然後調用處理方法。 – BRabbit27 2011-12-21 14:54:19
看到這個問題在2011年和現在的2015年,@ BRabbit27被問到,你可能有很多經驗。你能告訴我這件事嗎?有人知道有多少文件上傳? – 2015-09-05 08:33:23