p: descarga de archivo de p: datatable con ViewScoped managed bean no funciona. Llama a los métodos prepareFile y getFile dos veces. En la primera llamada de los métodos que mencioné establece el primer archivo de la tabla, y en la segunda llamada de los métodos establece el archivo correcto, pero siempre descarga solo el primero y el segundo nunca se descarga.Problema de Primefaces: p: descarga de archivo de p: datatable con bean gestionado ViewScoped
¿Por qué llama dos veces? ¿Por qué establece el primer archivo de la tabla? ¿Algunas ideas?
Aquí está mi código:
<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>
y en el bean gestionado (simplificado):
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;
}
Por lo tanto, hice una solución con una simple p: confirmDialog donde extraje el Ajax problemática = false comando, así que selecciono el archivo adjunto haciendo clic en p: datatable y ejecuto la descarga desde p: confirmdialog.
También he intentado pasar el rowIndex como af: param, pero siempre envía el mismo rowIndex: solo el primero en el que se hizo clic. Creo que el problema podría estar alrededor de este ajax = falso, pero no estoy seguro ... estoy usando PrimeFaces 2.2.1. y Glassfish 3.1 – d1van
Ahora parece que el frijol está destruido. Descarga el archivo correcto, pero cuando pruebo alguna acción después de eso, obtengo 'SEVERE: com.sun.faces.mgbean.ManagedBeanCreationException: Se ha producido un error al realizar la inyección de recursos en beans gestionados offerBean' – d1van