PrimeFaces FileUpload中的文件数
我对PrimeFaces组件非常陌生。我有一个FileUpload(多个文件上传),我想知道是否有方法可以知道上传组件上传组件之前有多少个文件。 我需要的是上传1到6个文件,并在第6次上传后处理所有文件。 任何想法,我怎么能实现这一点非常受欢迎。PrimeFaces FileUpload中的文件数
干杯
UPDATE 与oncomplete
已经尝试过,但它并不能帮助我,因为执行该事件的每一个文件上传不是时间“,直到所有文件都。
如果您想要一次上传所有文件或一次只上传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();
}
}
那么这样做,但问题是如何使动态,因为用户有时会上传6个文件,有时1个文件,有时3个文件...我想知道有多少文件将上传,甚至更好的我想知道何时上传所有文件。所以当用户选择3个文件时,只要第三个文件完全上传时就设置了一个标志 – BRabbit27 2011-12-21 15:43:40
@ BRabbit27我想你完全知道用户应该上传的所有文件,如果你不知道你不能使用属性' sizeLimit'因为你永远不知道......用户现在可以上传4,5,6个文件,并在一分钟后上传另一个文件;有两件事你可以做:实现一个按钮,例如'完成上传文件',按下按钮后,你可以调用处理方法(ajax或非ajax),或者你可以实现一个JavaScript函数(或使用RequestContext对象),如果之后的话,禁用上传标签(甚至隐藏它),5分钟,没有文件上传 – spauny 2011-12-21 15:51:52
是啊,谢谢!我想我会再放一个按钮来表示上传已完成。我只是想知道是否有办法知道上传了多少文件。是否有可能知道何时上传所有文件?我的意思是像'oncomplete'事件,但这会触发每个文件,是否有整个上传事件(所有文件上传后)? – BRabbit27 2011-12-21 16:05:26
好吧,这是相当古老的线程,但我发现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
}
}
我真的不明白一件事:你希望能够上传各6分档的,所以实际上上传,然后调用的处理方法?还是只有在所有6个文件都处于上传状态后才真正开始上传? – spauny 2011-12-21 06:26:24
将它们全部上传,然后调用处理方法。 – BRabbit27 2011-12-21 14:54:19
看到这个问题在2011年和现在的2015年,@ BRabbit27被问到,你可能有很多经验。你能告诉我这件事吗?有人知道有多少文件上传? – 2015-09-05 08:33:23