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

时间:2012-02-02 17:41:57

标签: java javascript jsf-2 primefaces

带有加载对话框的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:找到this解决方法,但'它'将在版本3上,所以我无法使用它。

1 个答案:

答案 0 :(得分:1)

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