【问题标题】:Load content in Primefaces Extensions documentViewer在 Primefaces Extensions documentViewer 中加载内容
【发布时间】:2018-08-13 12:38:07
【问题描述】:

我正在像这样将 StreamedContent 加载到文档查看器中。

xhtml:

<h:body>
    <h:form>
        <p:commandButton value="Content A" action="#{viewer.selectContentA()}" update="viewerForm" />
        <p:commandButton value="Content B" action="#{viewer.selectContentB()}" update="viewerForm" />
    </h:form>
    <h:form id="viewerForm">
        <pe:documentViewer value="#{viewer.content}" download="demo.pdf" height="500"/>
    </h:form>
</h:body>

豆:

public void selectContentA() {
    content = contentA;
}
public void selectContentB() {
    content = contentB;
}
public StreamedContent getContent() {
    return content;
}

问题: 有没有办法在不更新整个组件的情况下更改查看器中的文档?

【问题讨论】:

  • 更新“整体”组件有什么问题?
  • 问题是,如果您打开一个新文档而页面的其余部分保持静止,这会变得很烦人。我正在寻找一种解决方案,让它更顺利地工作,就像在“Url”、“资源”和“StreamedContent”之间切换时的展示柜primefaces.org/showcase-ext/sections/documentviewer/basic.jsf 所以我希望查看器保持原样并更新它的内容。
  • 在展示中,您切换到三个不同的选项卡。你总是可以使用类似的东西。定义 2 个查看器,加载一个,单击一个按钮,在后台加载另一个,完成后,通过 javascript 切换“查看器”。您可以查看源代码,看看是否有用于切换文档的 javascript API(查看器是基于 Mozilla pdf.js,所以有很多信息)
  • Documentviewer 使用 iFrame 从您的流媒体源动态加载内容。我认为没有一种方法可以按照当前的工作方式更新查看器的内容。它会创建一个 dynamic.xhtml 文档来加载您的流内容并传递给文档查看器。

标签: jsf primefaces primefaces-extensions


【解决方案1】:

使用:

function refresh() {
     document.getElementById('viewerForm:viewer').contentDocument.location.reload();
}
<p:commandButton value="Load document" ... oncomplete="refresh()" />

而不是

<p:commandButton` value="Load document" ...  update="viewerForm:viewer" />

为我工作。

【讨论】:

    猜你喜欢
    • 2019-01-28
    • 2016-12-21
    • 2016-02-04
    • 2021-09-18
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多