带有加载对话框的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上,所以我无法使用它。
答案 0 :(得分:1)
我的做法与我在问题上发布的解决方法中的建议相同。 我从我的版本下载了primefaces源代码,更改了FileDownloadActionListener类,在响应对象中添加了cookie,在我的页面中,我刚刚启动了一个setTimeout进程,每隔100毫秒检查一次cookie,当找到它时,删除它。