Multithreading 确保在文件上载侦听器完成后调用bean操作方法
当用户使用Primefaces fileUpload元素上载文件时,服务器方法仅在上载文件后调用。然后,当提交表单并且文件没有完全传输到服务器时,我就遇到了问题。我不知道在提交方法中应该等待多长时间 为了在submit方法期间等待,我创建了一个线程,该线程将在上传过程中一直存在,但正如前面所指出的,当用户选择文件时,不会触发方法“handleFileUpload(FileUploadEvent event)”Multithreading 确保在文件上载侦听器完成后调用bean操作方法,multithreading,jsf,file-upload,primefaces,Multithreading,Jsf,File Upload,Primefaces,当用户使用Primefaces fileUpload元素上载文件时,服务器方法仅在上载文件后调用。然后,当提交表单并且文件没有完全传输到服务器时,我就遇到了问题。我不知道在提交方法中应该等待多长时间 为了在submit方法期间等待,我创建了一个线程,该线程将在上传过程中一直存在,但正如前面所指出的,当用户选择文件时,不会触发方法“handleFileUpload(FileUploadEvent event)” public void handleFileUpload(FileUploadEven
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>
我在Primefaces手册中没有发现任何提示多亏了kolossus,我在文件上传过程中阻止了提交按钮 page.xhtml:
<script>
function disableButtons() {
$(PrimeFaces.escapeClientId('form:fileUpload_input')).prop('disabled', true);
$(PrimeFaces.escapeClientId('form:erstellen')).prop('disabled', true);
}
function enableButtons() {
if (!PF('upload').files.length) {
$(PrimeFaces.escapeClientId('form:fileUpload_input')).prop('disabled', false);
$(PrimeFaces.escapeClientId('form:erstellen')).prop('disabled', false);
}
}
</script>
<p:fileUpload fileUploadListener="#{eintrag.handleFileUpload}"
mode="advanced" update="msgFileUpload" auto="true"
sizeLimit="#{config.fileUploadMaxSize}"
allowTypes="/(\.|\/)(jpeg|jpg|png)$/" label="Auswählen"
id="fileUpload" dragDropSupport="false"
invalidSizeMessage="Dateigröße überschritten #{config.fileUploadMaxSize}"
onstart="disableButtons();"
oncomplete="enableButtons();"
widgetVar="upload" />
功能禁用按钮(){
$(PrimeFaces.escapeClientId('form:fileUpload\u input')).prop('disabled',true);
$(PrimeFaces.escapeClientId('form:erstellen')).prop('disabled',true);
}
功能启用按钮(){
if(!PF('upload').files.length){
$(PrimeFaces.escapeClientId('form:fileUpload\u input')).prop('disabled',false);
$(PrimeFaces.escapeClientId('form:erstellen')).prop('disabled',false);
}
}
为什么不在文件上载完成时阻止页面的其余部分/禁用组件?无论您尝试什么,决不,决不,决不在Java EE应用程序中手动创建线程。
<script>
function disableButtons() {
$(PrimeFaces.escapeClientId('form:fileUpload_input')).prop('disabled', true);
$(PrimeFaces.escapeClientId('form:erstellen')).prop('disabled', true);
}
function enableButtons() {
if (!PF('upload').files.length) {
$(PrimeFaces.escapeClientId('form:fileUpload_input')).prop('disabled', false);
$(PrimeFaces.escapeClientId('form:erstellen')).prop('disabled', false);
}
}
</script>
<p:fileUpload fileUploadListener="#{eintrag.handleFileUpload}"
mode="advanced" update="msgFileUpload" auto="true"
sizeLimit="#{config.fileUploadMaxSize}"
allowTypes="/(\.|\/)(jpeg|jpg|png)$/" label="Auswählen"
id="fileUpload" dragDropSupport="false"
invalidSizeMessage="Dateigröße überschritten #{config.fileUploadMaxSize}"
onstart="disableButtons();"
oncomplete="enableButtons();"
widgetVar="upload" />