2015-05-14 97 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重置爲其初始狀態。