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);

您的commandButtononclick事件将调用PrimeFaces的monitorDownload javascript onclick="PrimeFaces.monitorDownload(startFaDwn, stopFaDwn);"

最后,你必须提供你自己的startFaDownstopFaDown的实现。 这是我的:

<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

上一篇: Primefaces commandButton download complete hide dialog

下一篇: Get primefaces widgetVar in javascript and update it