2015-05-14 59 views
0

代码:如何在commandLink下载文件之前执行commandLink的操作方法?

<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.Then对话框关闭unexpectedly.Unexpectedly因为当对话框closed.But我重新打开对话框关闭事件不工作然后再次点击该链接。Works但下载以前的文件。所以在commandLink的操作方法之前执行了下载。我如何解决这个问题?

回答

0

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