Primefaces commandButton下载完整的隐藏对话框
在PrimeFaces 5.1 p:commandButton按下来调用下载动作。 在行动中从数据库获取数据并创建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点击打开对话框,但下载操作完成如何隐藏对话框?
如果您使用PrimeFaces,则可以利用PrimeFaces.monitorDownload
和<p:fileDownload>
。 这里记录在案。
基本上,你必须改变你的commandButton
来使用actionListener
来代替action
。 此actionListener
准备一个org.primefaces.model.StreamedContent
来流式传输您要下载的文件。 该流必须与<p:fileDownload>
value
属性<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);
您的commandButton
的onclick
事件将调用PrimeFaces的monitorDownload javascript onclick="PrimeFaces.monitorDownload(startFaDwn, stopFaDwn);"
。
最后,你必须提供你自己的startFaDown
和stopFaDown
的实现。 这是我的:
<script type="text/javascript">
function startFaDwn() {
PF('FADownloadDlg').show();
}
function stopFaDwn() {
PF('FADownloadDlg').hide();
}
</script>
正如你所看到的,这两个函数都可以根据需要打开和隐藏对话框。 你可以根据需要命名这些函数,显然它可以做你想做的事情,而不仅仅是打开/关闭对话框。
你不需要onComplete
事件,既不ajax="false"
属性。
希望能帮助到你!
链接地址: http://www.djcxy.com/p/68557.html