Primefaces - 在多个文件上传组件中按字母顺序获取文件

Ani*_*ony 4 jsf primefaces jsf-2

我在应用程序中使用Primefaces多文件上传组件.在这里,我选择'n'个文件,然后点击上传按钮.然后我需要fileUploadListener 按字母顺序获取每个文件.怎么可能?

Hat*_*mam 9

由于多文件上传组件是jQuery-File-Upload插件,因此默认状态不是顺序的,这意味着所有文件都是异步上传的.

要使组件执行顺序上载,您必须设置sequentialUploads为true,并且在更改时,我们对当前文件进行一些按字母顺序排序.这一切都是通过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>
Run Code Online (Sandbox Code Playgroud)

因此,在这种情况下,您的文件将按字母顺序上传.

注意:如果未将sequentialUploads设置为true,则无法控制首先发送哪个文件.

Github,在线演示

在此输入图像描述

希望这可以帮助.