fileUploadListener
中的每个文件。怎么可能?#1 楼
由于多文件上传组件是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>
所以在这种情况下,您的文件将按字母顺序上传。
注意:如果不将sequenceUploads设置为true,则无法控制要先发送哪个文件。
Github,在线演示
希望有帮助。
#2 楼
是的,但是这种解决方案不是很好:<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
评论
我尝试执行此操作,但它确实有效(涉及执行顺序请求时),但最终结果导致仅实际上传了一个文件(由fileUploadListener处理)。您对所有的fileUploadListeners调用有什么建议吗?
– Nuno
15年8月27日在14:53
另外,似乎这正在转变为功能github.com/primefaces/primefaces/issues/403
– Nuno
15年8月27日在14:57
@nuno我没有完全了解你。我发布的答案已经过多次上传的测试,对于监听器被调用的每个文件,也许还有其他不适用于您?
– Hatem Alimam
15年8月27日在14:58
也许这是无关的问题-我会进一步检查
– Nuno
15年8月27日在15:00
答案现在可能会帮助您更多。注意:我正在使用JSF 2.1进行测试,但是我不认为这是您遇到的问题...检查在线演示@nuno
– Hatem Alimam
15年8月27日在15:15