我在应用程序中使用Primefaces Multiple file upload component。在这里我选择' n'文件数量并点击上传按钮。然后我需要按照字母顺序获取fileUploadListener
中的每个文件。怎么可能?
答案 0 :(得分: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>
因此,在这种情况下,您的文件将按字母顺序上传。
注意:如果您没有将sequentialUploads设置为true,则无法控制首先发送哪个文件。
希望这有帮助。
答案 1 :(得分:1)
<p:remoteCommand action="#{attachmentBean.processAttachments}"
name="processAttachments" update="attachmentTable"/>
<p:fileUpload fileUploadListener="#{attachmentBean.onUpload}"
oncomplete="processAttachments()" />
attachmentBean.onUpload
将每个文件存储在List / Map / SortedMap中
attachmentBean.processAttachments
最终对List / Map进行排序并按顺序处理附件
attachmentBean
必须至少为@ViewScoped