在PrimeFaces 5.1中:commandButton按下调用下载操作。在从DB获取数据并创建pdf的操作中。当它完成下载pdf。我的问题巨大的数据创建花了一段时间我想显示对话框,因为用户那个时间没有进行进一步的操作。 CommandButton按我显示对话框,但不知道如何关闭对话框。如果有任何其他方式来完成关闭对话框的操作。
stud.xhtml
<p:commandButton value="download" action="#{stud.downloadAction}" onclick="PF('progressWaitDialog').show()" ajax="false" onComplete="PF('progressWaitDialog').hide();"/>
<p:dialog id="progressWaitDialog" widgetVar="progressWaitDialog" modal="true">
<h:graphicImage value="#{stud.progressWaitBar}"/>
</p:dialog>
stud.java
public string downloadAction()
{
createPdf(studenToList);
return null;
}
我怀疑commanButton点击打开对话框但是下载动作完成了如何隐藏对话框?
答案 0 :(得分:1)
如果您使用的是PrimeFaces,则可以利用PrimeFaces.monitorDownload
和<p:fileDownload>
。记录here。
基本上,您必须更改commandButton
以使用actionListener
而不是action
。此actionListener
准备org.primefaces.model.StreamedContent
来流式传输您要下载的文件。此流必须使用value
的{{1}}属性连接。
要准备<p:fileDownload>
,如果您的StreamedContent
方法返回文件,则会像以下一样简单:
createPdf(studenToList)
String mime = "application/pdf";
String name = "your-file-name.pdf";
File file = createPdf(studenToList);
StreamedContent stream = new DefaultStreamedContent(file, mime, name);
的{{1}}事件会调用primeFaces onclick
的monitorDownload javascript。
最后,您必须提供自己的commandButton
和onclick="PrimeFaces.monitorDownload(startFaDwn, stopFaDwn);"
实施。这是我的:
startFaDown
如您所见,两个功能都可以打开并隐藏对话框。你可以根据需要命名这些函数,显然它可以做你想要的,而不仅仅是打开/关闭对话框。
您不需要stopFaDown
个活动,也不需要<script type="text/javascript">
function startFaDwn() {
PF('FADownloadDlg').show();
}
function stopFaDwn() {
PF('FADownloadDlg').hide();
}
</script>
属性。
希望它有所帮助!