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からダウンロードを実行します。
私はまた、rowIndexをaf:paramとして渡してみましたが、常に同じrowIndexを送信しました:最初にクリックされたものだけです。私は問題がこのajax = falseの周りにあるかもしれないと思いますが、私は確信していません...私はPrimeFaces 2.2.1を使用しています。 Glassfish 3.1 – d1van
今、Beanが破壊されたようです。それは正しいファイルをダウンロードしますが、それ以降に何らかのアクションを試してみると、 'SEVERE:com.sun.faces.mgbean.ManagedBeanCreationException:管理対象Beanのリソース注入を実行中にエラーが発生しました。 – d1van