Java p的策略:带有对话框和加载状态的文件下载

Java p的策略:带有对话框和加载状态的文件下载,java,javascript,jsf-2,primefaces,Java,Javascript,Jsf 2,Primefaces,与加载对话的策略 我试图在开始下载文件后制作一个加载条。我的下载按钮如下所示: <p:commandButton id="btnFirstType" styleClass="bt_princ" value="Download File" onclick="loading.show()" ajax="false"> <p:fileDownload value="#{mbe

与加载对话的策略

我试图在开始下载文件后制作一个加载条。我的下载按钮如下所示:

<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>
public StreamedContent getMyFile(){
     return this.getReport(Type.CSV); //I assure this works, debugged...
}
问题是,单击下载按钮后,如果启动加载对话框,下载不会发生。 我考虑使用检查布尔变量,以便知道文件何时生成,这样我可以在单击按钮后显示对话框(如使用JavaScript设置
setTimeout
),但这可能是我关于整个事件发生方式的错误。还有其他建议吗

PS1:文件下载后轮询停止工作,所以我不知道何时关闭拨号

PS2:我正在使用PrimeFaces2.2,无法更新


PS3:找到了变通方法,但“它将”出现在版本3上,因此我无法使用它。

我按照问题上发布的变通方法中的建议做了同样的操作。
我从我的版本下载了primefaces源代码,更改了FileDownloadActionListener类,在response对象中添加了Cookie,在我的页面中,我刚刚启动了一个setTimeout进程,该进程将每100毫秒检查一次Cookie,当找到它时,将其删除。

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