Tenho que desenvolver uma lista, onde cada registro é um arquivo para download.
O problema que estou tendo é o seguinte, é possível fazer o download de cada arquivo apenas uma vez, a partir da segunda vez eu tenho uma exception… Alguém tem alguma idéia do que possa ser?
StackTrace:
java.io.IOException: Stream Closed
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(Unknown Source)
at org.primefaces.component.filedownload.FileDownloadActionListener.processAction(FileDownloadActionListener.java:77)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:813)
at javax.faces.component.UICommand.broadcast(UICommand.java:300)
at javax.faces.component.UIData.broadcast(UIData.java:1108)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
.xhtml:
<p:dataList value="#{convertePdfBean.listaPdfs}" var="arquivo"
type="definition" styleClass="panelMedio">
<f:facet name="header">
Converter para PDF
</f:facet>
<h:commandLink value=" #{arquivo.name}">
<p:fileDownload value="#{convertePdfBean.pdf}" />
<f:param name="fileName" value="#{arquivo.name}"/>
</h:commandLink>
</p:dataList>
Bean:
[code]@ManagedBean
@ViewScoped
public class ConvertePdfBean implements Serializable{
private static final long serialVersionUID = -5979281879438861747L;
private List<StreamedContent> listaPdfs;
private StreamedContent pdf;
public ConvertePdfBean() {
listaPdfs = new ArrayList<StreamedContent>();
File f = new File("C:\\temp\\pdf");
final String extensao = ".pdf";
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String name) {
name = name.toLowerCase();
return name.endsWith(extensao);
}
};
if (f != null) {
InputStream is = null;
for(File file :f.listFiles(filter)){
try {
is = new FileInputStream(file.getAbsolutePath());
} catch (FileNotFoundException e) {
e.printStackTrace();
}
StreamedContent arquivo = new DefaultStreamedContent(is, "application/pdf", file.getName());
arquivo.getName();
listaPdfs.add(arquivo);
}
}
}
public List<StreamedContent> getListaPdfs(){
return listaPdfs;
}
public StreamedContent getPdf() {
String fileName = FacesContext.getCurrentInstance()
.getExternalContext().getRequestParameterMap().get("fileName");
for (StreamedContent f : listaPdfs) {
if (fileName != null && f.getName().equals(fileName)) {
pdf = f;
}
}
return pdf;
}
}[/code]