Primefaces commandButton下载完整隐藏对话框

时间:2016-01-21 14:50:43

标签: jsf primefaces

在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点击打开对话框但是下载动作完成了如何隐藏对话框?

1 个答案:

答案 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。

最后,您必须提供自己的commandButtononclick="PrimeFaces.monitorDownload(startFaDwn, stopFaDwn);"实施。这是我的:

startFaDown

如您所见,两个功能都可以打开并隐藏对话框。你可以根据需要命名这些函数,显然它可以做你想要的,而不仅仅是打开/关闭对话框。

您不需要stopFaDown个活动,也不需要<script type="text/javascript"> function startFaDwn() { PF('FADownloadDlg').show(); } function stopFaDwn() { PF('FADownloadDlg').hide(); } </script> 属性。

希望它有所帮助!