2017-08-16 94 views
1

我有一種情況,我需要上傳多個文件。 瀏覽按鈕將允許多個選擇,然後它會顯示文件列表。 然後,另一個按鈕將執行實際上傳。PrimeFaces FileUpload隊列大小

我想只要用戶試圖上載超過10個文件中的錯誤消息。

問題是,當用戶選擇多於10個文件(不一定全部一次)時,我有一個彈出窗口,並且我清空文件列表,但是第10個文件中的每個文件都會重新添加到列表中。這不應該發生,因爲我希望列表在每次捕獲這個異常時都清空。

這是由於這樣的事實,我不能管理有一個隊列大小或將其清空,所以我永遠不會知道,如果一個文件是第一套或11日。

public void handleFileUpload(
       FileUploadEvent e) { 

      e.getComponent().setTransient(false); 

      //stuffstuffstuff 

      try{ 
       if(list.size()>=webApplicationConst.getMultipleUploadFileLimit()) 
        throw new FrontEndException("File limit exceeded", log); 
       else 
        list.add(file); 
      } 
      catch(FrontEndException LimitExcedeed){ 
      list.clear(); 

this.openWarningDialog(MessageConst.MESSAGE_WARNING_DIALOG_TITLE_LIMIT_EXCEDEED ); 
      } 

     } 

由於OnStart中,併爲每一個文件,而不是對每一個上傳(仍然不知道爲什麼BTW)oncomplite工作,有沒有辦法知道隊列的大小,清空它,當我得到的異常或停止整個上傳過程中不使用JavaScript?

回答

0

6.1用戶手冊提到p的下列屬性的PrimeFaces:文件上傳:當用戶選擇的文件超過fileLimit用戶點擊「上傳」前

fileLimit   null Integer Maximum number of files allowed to upload. 
fileLimitMessage null String Message to display when file limit exceeds. 

的fileLimitMessage被顯示。

如果你想要一個更加全球化的限制,例如每個會話,然後綁定在bean的fileLimit屬性的屬性:

fileLimit="#{myBean.sessionFileLimit}" 

當此限制相應接收上傳,在fileUploadListener遞減。上傳後更新p:fileUpload以更新客戶端上的限制。當達到限制時,甚至可以添加disabled="#{myBean.sessionFileLimit == 0}"以完全禁用fileUpload。

+0

這些屬性的問題是,它們只是阻止我選擇多於N個文件。我仍然可以選擇N-1文件兩次想過,有同樣的問題:( – pedro

+1

@pedro,那麼不只是設置fileLimit到一個靜態值,將它綁定到一個變量:'fileLimit =「#{} myBean.sessionOrUserOrWhateverfileLimit」 。'當接收上傳此遞減額度更新。p:文件上傳上傳後更新客戶端上的限制甚至加上'禁用=「#{myBean.sessionOrUserOrWhateverfileLimit == 0}」' –

+0

那將不能解決問題。當用戶試圖上傳超過10個文件時,我需要它清除已上傳文件和剩餘文件的隊列,清除實際上是一個功能,而不是一個解決方法。用戶可能會選擇11個文件,然後上傳10個文件,而不會知道任何錯誤 – pedro