2011-08-28 7 views
5

p:filedownload from p:ViewScopedマネージドBeanを使用したdatatableは動作しません。メソッドprepareFileとgetFileを2回呼び出します。私が言及したメソッドの最初の呼び出しでは、テーブルから最初のファイルを設定し、メソッドの2回目の呼び出しでは正しいファイルを設定しますが、常に最初のファイルのみをダウンロードし、2番目のファイルはダウンロードされません。プライムフェイスの問題:p:filedownloadからp:ViewScopedマネージドBeanでデータテーブル

なぜ2回呼び出されますか?なぜそれがテーブルから最初のファイルを設定するのですか?何か案は?ここで

は私のコードです:

<p:dataTable id="offer_attachment_datatable" 
        widgetVar="offer_attachment_datatable" 
        var="attachment" 
        value="#{offerBean.offerAttachments}"> 
      <p:column> 
       <f:facet name="header"/> 
       <p:commandLink ajax="false" actionListener="#{offerBean.prepareFile(attachment)}" title="#{attachment.name}"> 
        <p:graphicImage value="/resources/themes/navigator_b2e/images/drive-download.png" /> 
        <p:fileDownload value="#{offerBean.file}"/> 
       </p:commandLink> 
      </p:column> 
</p:dataTable> 

および管理対象Bean(簡体字)に:私は問題のAJAXを抽出confirmDialog =偽:だから

private StreamedContent file; 
private InputStream stream; 

public void prepareFile(OfferAttachment attachment){ 
    System.out.println("Attachment: "+attachment.getName()); 
    stream = new ByteArrayInputStream(attachment.getAttachment()); 
    file = new DefaultStreamedContent(stream, "text/plain", attachment.getName()); 
    stream = null; 
} 

public StreamedContent getFile() { 
    System.out.println("File: "+file.getName()); 
    return file; 
} 

public void setFile(StreamedContent file) { 
    this.file = file; 
} 

、私はシンプルなPと回避策を作りましたコマンドリンクですので、添付ファイルをp:datatableでクリックして選択し、p:confirmdialogからダウンロードを実行します。

+0

私はまた、rowIndexをaf:paramとして渡してみましたが、常に同じrowIndexを送信しました:最初にクリックされたものだけです。私は問題がこのajax = falseの周りにあるかもしれないと思いますが、私は確信していません...私はPrimeFaces 2.2.1を使用しています。 Glassfish 3.1 – d1van

+0

今、Beanが破壊されたようです。それは正しいファイルをダウンロードしますが、それ以降に何らかのアクションを試してみると、 'SEVERE:com.sun.faces.mgbean.ManagedBeanCreationException:管理対象Beanのリソース注入を実行中にエラーが発生しました。 – d1van

答えて

1

2.2.1では同じ問題がありました。私は同じ属性でをp:commandButtonに置き換えて解決策を見つけました。このように、「リピート(フェイスレット)とテーブルUI」:と:それは私のために働いたソリューションは、「データテーブルP」を置き換えることだったcommandLinkコンポーネントの動作

0

に関連するバグだと思われ

<table role="grid"> 
<thead> 
    <tr role="row"> 
     <th>File Name</th> 
     <th>Action</th> 
    </tr> 
</thead> 
<tbody> 
    <ui:repeat value="#{downloadFileBean.files}" var="f"> 
     <tr role="row"> 
      <td><h:outputText value="#{f.name}" /></td> 
      <td> 
       <p:commandLink id="download" ajax="false"> 
        <h:outputText value="Download" /> 
        <p:fileDownload value="#{downloadFileBean.file}" /> 
        <f:param name="fileName" value="#{f.name}" /> 
       </p:commandLink> 
      </td> 
     </tr> 
    </ui:repeat> 
</tbody> 

関連する問題