【发布时间】:2015-05-10 20:39:08
【问题描述】:
当用户使用 Primefaces fileUpload 元素上传文件时,服务器方法仅在文件上传后调用。然后我在提交表单并且文件没有完全传输到服务器时出现问题我不知道我应该在提交方法中等待多长时间。
为了在提交方法期间等待,我创建了一个线程,只要上传需要,它就会一直存在,但正如之前指出的,当用户选择文件时,不会触发方法“handleFileUpload(FileUploadEvent event)”。
public void handleFileUpload(FileUploadEvent event) {
System.out.println("start fileupload");
FileUploadWaiter fileUploadWaiter = new FileUploadWaiter();
fileUploadThread = new Thread(fileUploadWaiter);
fileUploadThread.start();
System.out.println("fileupload triggered");
fileType = event.getFile().getContentType();
file = convertUploadedFileToByte(event.getFile());
fileUploadWaiter.stop();
try {
fileUploadThread.join();
} catch (InterruptedException e) {
//
}
System.out.println("upload fertig");// TODO
}
在页面上:
<h:form enctype="multipart/form-data" id="form">
...
<p:fileUpload fileUploadListener="#{eintrag.handleFileUpload}"
mode="advanced" update="msgFileUpload" auto="true"
sizeLimit="#{config.fileUploadMaxSize}"
allowTypes="/(\.|\/)(jpeg|jpg|png)$/" label="Auswählen"
disable="false" id="fileUpload" />
...
</h:form>
代码:
public void handleFileUpload(FileUploadEvent event) {
System.out.println("start fileupload");
FileUploadWaiter fileUploadWaiter = new FileUploadWaiter();
fileUploadThread = new Thread(fileUploadWaiter);
fileUploadThread.start();
System.out.println("fileupload triggered");
fileType = event.getFile().getContentType();
file = convertUploadedFileToByte(event.getFile());
fileUploadWaiter.stop();
try {
fileUploadThread.join();
} catch (InterruptedException e) {
//
}
System.out.println("fileupload finished");// TODO
}
我在 Primefaces 手册中没有找到任何提示
【问题讨论】:
-
为什么不在文件上传完成时阻止页面的其余部分/禁用组件?
-
无论你尝试什么,都不要,never,never 在 Java EE 应用程序中手动创建
Thread。
标签: multithreading jsf file-upload primefaces