Multithreading 确保在文件上载侦听器完成后调用bean操作方法

Multithreading 确保在文件上载侦听器完成后调用bean操作方法,multithreading,jsf,file-upload,primefaces,Multithreading,Jsf,File Upload,Primefaces,当用户使用Primefaces fileUpload元素上载文件时,服务器方法仅在上载文件后调用。然后,当提交表单并且文件没有完全传输到服务器时,我就遇到了问题。我不知道在提交方法中应该等待多长时间 为了在submit方法期间等待,我创建了一个线程,该线程将在上传过程中一直存在,但正如前面所指出的,当用户选择文件时,不会触发方法“handleFileUpload(FileUploadEvent event)” public void handleFileUpload(FileUploadEven

当用户使用Primefaces fileUpload元素上载文件时,服务器方法仅在上载文件后调用。然后,当提交表单并且文件没有完全传输到服务器时,我就遇到了问题。我不知道在提交方法中应该等待多长时间

为了在submit方法期间等待,我创建了一个线程,该线程将在上传过程中一直存在,但正如前面所指出的,当用户选择文件时,不会触发方法“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>

我在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" />