2011-12-20 98 views
3

我对PrimeFaces组件非常陌生。我有一个FileUpload(多个文件上传),我想知道是否有方法可以知道上传组件上传组件之前有多少个文件。 我需要的是上传1到6个文件,并在第6次上传后处理所有文件。 任何想法,我怎么能实现这一点非常受欢迎。PrimeFaces FileUpload中的文件数

干杯

UPDATEoncomplete已经尝试过,但它并不能帮助我,因为执行该事件的每一个文件上传不是时间“,直到所有文件都。

+0

我真的不明白一件事:你希望能够上传各6分档的,所以实际上上传,然后调用的处理方法?还是只有在所有6个文件都处于上传状态后才真正开始上传? – spauny 2011-12-21 06:26:24

+0

将它们全部上传,然后调用处理方法。 – BRabbit27 2011-12-21 14:54:19

+0

看到这个问题在2011年和现在的2015年,@ BRabbit27被问到,你可能有很多经验。你能告诉我这件事吗?有人知道有多少文件上传? – 2015-09-05 08:33:23

回答

1

如果您想要一次上传所有文件或一次只上传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(); 
    } 
} 
+0

那么这样做,但问题是如何使动态,因为用户有时会上传6个文件,有时1个文件,有时3个文件...我想知道有多少文件将上传,甚至更好的我想知道何时上传所有文件。所以当用户选择3个文件时,只要第三个文件完全上传时就设置了一个标志 – BRabbit27 2011-12-21 15:43:40

+0

@ BRabbit27我想你完全知道用户应该上传的所有文件,如果你不知道你不能使用属性' sizeLimit'因为你永远不知道......用户现在可以上传4,5,6个文件,并在一分钟后上传另一个文件;有两件事你可以做:实现一个按钮,例如'完成上传文件',按下按钮后,你可以调用处理方法(ajax或非ajax),或者你可以实现一个JavaScript函数(或使用RequestContext对象),如果之后的话,禁用上传标签(甚至隐藏它),5分钟,没有文件上传 – spauny 2011-12-21 15:51:52

+0

是啊,谢谢!我想我会再放一个按钮来表示上传已完成。我只是想知道是否有办法知道上传了多少文件。是否有可能知道何时上传所有文件?我的意思是像'oncomplete'事件,但这会触发每个文件,是否有整个上传事件(所有文件上传后)? – BRabbit27 2011-12-21 16:05:26

2

好吧,这是相当古老的线程,但我发现straitforward方式来确定上传文件的数量。

p:fileUpload小部件有一个关于选定文件的meta-info数组。通过将这个数组的长度传递给你的bean,你将获得文件的总数。

有但一个问题:p:fileUpload不提交周围的形式,所以我不得不把隐形按钮与​​一起传递从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 
    } 
} 
相关问题