重新加载页面后恢复 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");