如何在commandLink中的filedownload之前执行commandLink的action方法?

时间:2015-05-14 19:05:06

标签: jsf primefaces

代码:

<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的动作方法之前执行文件下载。如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您需要使用actionListenerp:fileDownload准备文件流,因为在下载逻辑执行后会触发action方法。
这也将修复消失的对话框 - 它发生了,因为没有文件,下载请求导致非AJAXical POST导航,这基本上将页面DOM重置为其初始状态。