下载按钮第一次不起作用

时间:2016-08-14 09:10:06

标签: jsf jsf-2 primefaces download

我正在使用PrimeFaces的下载组件和命令按钮从FTP服务器下载文件的XHTML页面。

在Tomcat服务器上运行应用程序时,打开页面并首次按下载进入下载功能并将文件成功下载到DefaultStreamedContent对象中,但浏览器上似乎没有下载任何内容在等待我的页面下面显示的tomcat消息后,页面似乎刷新了(这只是第一次点击的全部内容)。

但是当第二次按下载时,它第二次进入下载功能并成功下载文件,但浏览器上显示的是第一个下载的文件。

此外,当我删除文件并再次启动应用程序时:首次下载时知道该文件未退出。

这是摘要的另一个案例:

  • 首先点击下载文件X,浏览器上没有任何内容可供下载
  • 下载文件Y下载2秒,下载文件x,这就是我知道它下载了第一个文件的原因

注意:

  1. 没有发生异常,首先在调试模式下成功点击下载的文件,但首次只在浏览器上显示
  2. 我试图将此按钮放在另一个空白页面和新表单中,但发生了同样的问题。
  3. 我的XHTML页面代码:

    <p:commandButton id="downloadButton"
        value="#{messages.label_download}" icon="ui-icon-arrowthick-1-s"
        onclick="PrimeFaces.monitorDownload(start, stop);"
        action="#{rapportiprovaBean.handleFileDownload(rapportiprova)}"
        immediate="true" style="width= 5%">
        <p:fileDownload
            value="#{rapportiprovaBean.fileManager.downloadedFile}" />
    </p:commandButton>
    

    我的托管bean代码:

    public void handleFileDownload(Rapportiprova rapporti) {
        Documenti documenti = new Documenti();
        documentiService = new DocumentiServiceImpl();
        fileManager = new FileManager();
        try {
            selectedRapportiProva = rapporti;
            if (selectedRapportiProva.getIdDoc() != null) {
                DDT_Server_Info = fileManager.loadDDT_Info();
                documenti = selectedRapportiProva.getIdDoc();
                folder = documenti.getIdRif().getDescrizione();
                fileName = documenti.getDoc();
                InputStream stream = fileManager.downloadDDTFile(fileName, DDT_Server_Info, folder);
    
                if (stream != null)
                {
                    DefaultStreamedContent streamContent=new DefaultStreamedContent(stream, FileManager.getFileContentType(fileName), fileName);
                    fileManager.setDownloadedFile(streamContent);
                }
                stream.close();
    
            } else {
                fileManager.setDownloadedFile(null);
                FacesMessage facesMessage = MessageFactory.getMessage("message_error_file_not_exits",
                        FacesMessage.SEVERITY_ERROR);
                FacesContext.getCurrentInstance().addMessage(null, facesMessage);
            }
    
        } catch (Exception e) {
            FacesMessage facesMessage = MessageFactory.getMessage("message_error_download_file",
                    FacesMessage.SEVERITY_ERROR);
            FacesContext.getCurrentInstance().addMessage(null, facesMessage);
        }
        fileManager.setDownloadedFile(null);
    }
    

    我的问题是,为什么文件是在内部下载的,而不是出现在第一次点击下载的浏览器上,但是在第二次点击此按钮或其他文件的任何其他按钮时,它会显示在浏览器上下载的第一个文件是不对的行为?

0 个答案:

没有答案