Primefaces扩展文档查看器显示下载状态



我使用素数面扩展documentViewer来显示pdf。文件是流式传输的,这意味着backingbean提供了org.primefaces.model.DefaultStreamedContent的实例。如果显示了一个大的pdf,则需要一些时间,直到查看器显示一些内容。在PF扩展网站的展示中,documentViewer在查看器按钮栏下显示了一个加载栏。不幸的是,这在我的案例中没有显示出来。在展示柜中没有使用DefaultStreamContent。它是文件的url。也许我必须设置流媒体内容的总大小?DefaultStreamedContent可能吗?

也许我必须设置流式传输内容的总大小

是的!只有在事先知道响应内容长度的情况下,客户端才能计算进度。在JSF中,您可以通过ExternalContext#setResponseContentLength()设置响应内容长度。

如果你想返回StreamedContent,下面是你可以做的(基于a.o.用p:graphicImage和StreamedContent显示数据库中的动态图像):

@ManagedBean
@ApplicationScoped
public class PdfManager {
    @EJB
    private PdfService service;
    public StreamedContent getContent() throws IOException {
        FacesContext context = FacesContext.getCurrentInstance();
        if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
            return new DefaultStreamedContent();
        } else {
            Pdf pdf = service.generateItSomehow();
            context.getExternalContext().setResponseContentLength(pdf.getLength());
            return new DefaultStreamedContent(pdf.getInputStream());
        }
    }
}

最新更新