Primefaces下载文件java.io.IOException:第二次后流关闭
我对primefaces 5.0组件p:fileDownload有问题,我有以下bean storePrimefaces下载文件java.io.IOException:第二次后流关闭,primefaces,jsf-2.2,Primefaces,Jsf 2.2,我对primefaces 5.0组件p:fileDownload有问题,我有以下bean storeDefaultStreamedContent,我得到存储的值来下载它: 豆子: public class EBMail implements Serializable { private DefaultStreamedContent attachment; // @ here setter and getter too . } 从XHTML文件: <p:commandLin
DefaultStreamedContent
,我得到存储的值来下载它:
豆子:
public class EBMail implements Serializable {
private DefaultStreamedContent attachment;
// @ here setter and getter too .
}
从XHTML文件:
<p:commandLink ajax="false" value="Download Attachment" rendered="#{mbMail.attachment != null}">
<p:fileDownload value="#{mbMail.attachment}" />
</p:commandLink>
我在JFS 2.2.7和Primefaces 5.0上运行,当我第二次下载文件时,我会将文件上传到bean中,即使是另一个对象“邮件”
任何解决方案,我都会关注周围的许多解决方案,没有任何帮助,或者我已经对其进行了测试。我最终解决了这个问题,我让新类存储我的数据,以及准备从我的类对象下载流的操作,当下载文件时,我从我的类字节中读取字节,如下所示: 类别:
public class Attachment implements Serializable {
private String name;
private String type;
private String encoding;
private byte[] data;
// ... Setters and getters ...
public Attachment () {
this.encoding = "UTF-8";
}
}
豆子:
public class MailBean implements Serializable {
// alot of properties
private Attachment attachment;
// setters and getters
}
托管Bean:
public class MailManagedBean implements Serializable {
private DefaultStreamedContent attachmentToDownload;
private MailBean mail;
// @ here setter and getter too .
public void prepare() {
InputStream stream = new ByteArrayInputStream(mail.getAttachment.getData());
attachmentToDownload = new DefaultStreamedContent(stream, mail.getAttachment.getType(), mail.getAttachment.getName(), mail.getAttachment.getEncoding());
}
}
在XHTML文件中(我添加了操作):
public class MailManagedBean implements Serializable {
private DefaultStreamedContent attachmentToDownload;
private MailBean mail;
// @ here setter and getter too .
public void prepare() {
InputStream stream = new ByteArrayInputStream(mail.getAttachment.getData());
attachmentToDownload = new DefaultStreamedContent(stream, mail.getAttachment.getType(), mail.getAttachment.getName(), mail.getAttachment.getEncoding());
}
}
<p:commandLink ajax="false" value="Download Attachment"
rendered="#{mbMail.mail.attachment != null}" action="#{mbMail.prepare()}">
<p:fileDownload value="#{mbMail.attachmentToDownload}" />
</p:commandLink>