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,当找到它时,将其删除