BRa*_*t27 5 upload jsf primefaces
我对 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>
Run Code Online (Sandbox Code Playgroud)
我还必须使用它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
}
}
Run Code Online (Sandbox Code Playgroud)
如果您想上传所有文件,一次全部 6 个或一次仅 1 个,然后调用处理消息,则必须创建一个变量或更好的变量,在其中list插入每个文件的名称,甚至是文件对象,当 ArrayList 大小达到 6 时,调用处理方法。就那么简单!
private ArrayList<UploadedFile> listWithUploadedFile = new ArrayList<UploadedFile>();
public void uploadMethod(){
//upload file, save input stream and any other thing you want
listWithUploadedFile.add(file);
if(listWithUploadedFile.size==6){
myProcessUploadedFilesMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3352 次 |
| 最近记录: |