重新加载页面后恢复 primefaces documentViewer
Restore primefaces documentViewer after page reload
我正在使用 primefaces-extensions 中的 documentViewer-component,如下所示:
<pe:documentViewer cache="true" value="#{myBean.streamedContent}"/>
myBean 是 SessionScoped。
如果我重新加载页面,将调用 getter 并且 streamedContent 不为空,但查看器显示一个空页面和消息 stream must have data
.
如何在页面重新加载时恢复查看器中的文档?
我已经使用 PrimeFaces Extensions Showcase 重现了您的问题,所以我使用了以下代码
ByteArrayOutputStream out = new ByteArrayOutputStream();
Document document = new Document();
PdfWriter.getInstance(document, out);
document.open();
for (int i = 0; i < 50; i++) {
document.add(new Paragraph("All work and no play makes Jack a dull boy"));
}
document.close();
content = new DefaultStreamedContent(new ByteArrayInputStream(out.toByteArray()), "application/pdf");
但我找到了解决办法。仅使用 DefaultStreamedContent
时存在问题,但当我检查层次结构时,我发现也可以使用 ByteArrayContent
。它甚至在页面重新加载后仍然有效。
示例用法:
content = new ByteArrayContent(out.toByteArray(), "application/pdf");
我正在使用 primefaces-extensions 中的 documentViewer-component,如下所示:
<pe:documentViewer cache="true" value="#{myBean.streamedContent}"/>
myBean 是 SessionScoped。
如果我重新加载页面,将调用 getter 并且 streamedContent 不为空,但查看器显示一个空页面和消息 stream must have data
.
如何在页面重新加载时恢复查看器中的文档?
我已经使用 PrimeFaces Extensions Showcase 重现了您的问题,所以我使用了以下代码
ByteArrayOutputStream out = new ByteArrayOutputStream();
Document document = new Document();
PdfWriter.getInstance(document, out);
document.open();
for (int i = 0; i < 50; i++) {
document.add(new Paragraph("All work and no play makes Jack a dull boy"));
}
document.close();
content = new DefaultStreamedContent(new ByteArrayInputStream(out.toByteArray()), "application/pdf");
但我找到了解决办法。仅使用 DefaultStreamedContent
时存在问题,但当我检查层次结构时,我发现也可以使用 ByteArrayContent
。它甚至在页面重新加载后仍然有效。
示例用法:
content = new ByteArrayContent(out.toByteArray(), "application/pdf");