p: загрузка файла из p: datatable с управляемым компонентом ViewScoped не работает.Он вызывает методы prepareFile и getFile дважды.При первом вызове методов, о которых я упоминал, он устанавливает первый файл из таблицы, а при втором вызове методов он устанавливает правильный файл, но он всегда загружает только первый файл, а второй никогда не загружается.
Почему он звонит дважды?Почему он устанавливает первый файл из таблицы?Есть идеи?
Вот мой код:
<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>
и в управляемом бине (упрощенно):
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:verifyDialog, где я извлек проблемную ссылку команды ajax = false, поэтому я выбираю вложение, щелкая его в p: datatable, и выполняю загрузку из p: verifydialog.