2015-05-10 24 views
0

当用户上载带有Primefaces fileUpload元素的文件时,仅在文件上传后调用服务器方法。然后,当提交表单并且文件未完全传输到服务器时,我遇到了问题。我不知道在提交方法中需要等多久。确保在文件上传侦听器完成后调用Bean操作方法

要在提交方法期间等待,我创建了一个线程,只要上传需要,就会在用户选择文件时不会触发方法“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没有提示手册

+1

为什么不阻止,而该文件的上传完成页/禁用成分的休息吗? – kolossus

+0

无论您尝试什么,永远不会*,永远*,**永远不会**在Java EE应用程序中手动创建一个'Thread'。 – BalusC

回答

0

感谢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" /> 
相关问题