gpt4 book ai didi

jsf - FileUpload 中的 PrimeFaces 文件数

转载 作者:行者123 更新时间:2023-12-04 23:52:55 25 4
gpt4 key购买 nike

我对 PrimeFaces 组件很陌生。我有一个 FileUpload(上传了多个文件),我想知道是否有办法知道上传组件中有多少文件 之前 上传它们。
我需要的是上传 1 到 6 个文件,并在第 6 个文件上传后处理所有文件。
关于如何实现这一目标的任何想法都非常受欢迎。

干杯

更新
已经用 oncomplete 试过了但这对我没有帮助,因为每次上传文件时都会执行此事件,而不是直到所有文件都上传。

最佳答案

好的,这是一个很老的线程,但我发现了一种确定上传文件数量的简单方法。
p:fileUpload小部件有一个包含有关所选文件的元信息的数组。通过将此数组的长度传递给您的 bean,您将获得文件总数。

但是有一个问题:p:fileUpload不提交周围的表单,所以我不得不在 h:inputHidden 旁边放上不可见的按钮将文件数从 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
}
}

关于jsf - FileUpload 中的 PrimeFaces 文件数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8582921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com