p:fileDownload的策略,带有对话框和加载状态

Strategy for p:fileDownload with dialog and loading status

本文关键字:对话框 加载 状态 fileDownload 策略      更新时间:2023-09-26

带有加载对话框的p:fileDownload策略

我正试图在开始下载一个文件后制作一个加载栏。我的下载按钮是这样的:

<p:commandButton id="btnFirstType"
            styleClass="bt_princ"
             value="Download File"
             onclick="loading.show()"
             ajax="false">
    <p:fileDownload value="#{mbean.myFile}"/>
</p:commandButton>
<p:dialog modal="true" 
          widgetVar="loading" 
          header="Status"   
          draggable="false" 
          closable="false">  
        <p:graphicImage value="/loading.gif" />  
</p:dialog>

我的MBean是这样的:

public StreamedContent getMyFile(){
     return this.getReport(Type.CSV); //I assure this works, debugged...
}

问题是,在点击下载按钮后,如果我启动加载对话框,下载就不会发生。我想过用p:poll来检查一个布尔变量,这样我就知道文件是什么时候生成的,这样我可以在点击按钮后显示对话框(就像用JavaScript设置setTimeout一样),但这可能是我对整个事情发生方式的错误。还有其他建议吗?

PS1:文件下载后轮询停止,所以我不知道什么时候关闭拨号

PS2:我正在使用Primefaces 2.2,无法更新。

PS3:找到了这个解决方法,但"它将"在版本3上,所以我不能使用它。

我做了与发布在我的问题上的解决方法中建议的相同的操作。我从我的版本下载了primefaces源代码,更改了FileDownloadActionListener类,在响应对象中添加了cookie,在我的页面中,我刚刚用setTimeout启动了一个进程,它将每100毫秒检查一次cookie,当找到它时,将其删除。