代码:
<p:dialog header="Downloads" widgetVar="hwDialog" modal="true"
showEffect="fade" hideEffect="fade" resizable="false"
appendTo="@(body)" width="700" height="500" position="center center">
<p:ajax event="close" listener="#{MB.selectedReset()}"
update="@([id$=hwTable])" />
<h:form id="dlg_form">
<p:dataTable id="dlg_hwTable" var="std"
value="#{MB.list}"
paginator="true" rows="10" rowKey="#{std.id}"
rowsPerPageTemplate="5,10,15" rowIndexVar="count">
<p:column headerText="File">
<p:commandLink ajax="false" value="Download"
action="#{MB.prepareForDownload(std)}">
<p:fileDownload value="#{MB.file}" />
</p:commandLink>
</p:column>
</p:dataTable>
</h:form>
</p:dialog>
文件在p:filedownload中第一次单击时为空。然后对话框意外关闭。出乎意料的是,当对话框关闭时,关闭事件不起作用。但是我重新打开对话框并单击再次链接。工作但是下载以前的文件。在commandLink的动作方法之前执行文件下载。如何解决这个问题?
答案 0 :(得分:0)
您需要使用actionListener
为p:fileDownload
准备文件流,因为在下载逻辑执行后会触发action
方法。
这也将修复消失的对话框 - 它发生了,因为没有文件,下载请求导致非AJAXical POST导航,这基本上将页面DOM重置为其初始状态。