【发布时间】:2018-10-24 03:44:04
【问题描述】:
我在使用 PrimeFaces 6.2 和 MyFaces 2.2.12 的 Primefaces Extensions (6.2.9) 的 DocumentViewer 中显示 StreamedContent PDF 时遇到问题。我读了同样的问题,但这是另一种情况。
Message: Missing PDF in PrimeFaces Extensions DocumentViewer
这是我的 xhtml 代码
<p:commandButton icon="fa fa-print" actionListener="#{bean.onPrerender}" />
对话框代码
<p:dialog id="dvDialog" widgetVar="dv_dialog" dynamic="true" header="Document" width="1200px" height="700px" modal="true">
<pe:documentViewer cache="true" height="500" value="#{bean.content}" download="report.pdf" />
</p:dialog>
这是我的java代码
private StreamedContent content;
public void onPrerender(ActionEvent actionEvent) {
try {
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");
content = new ByteArrayContent(out.toByteArray(), "application/pdf");
} catch (Exception e) {
e.printStackTrace();
}
PrimeFaces.current().executeScript("PF('dv_dialog').show()");
}
public StreamedContent getContent() {
return content;
}
public void setContent(StreamedContent content) {
this.content = content;
}
错误信息
PDF.js v1.10.88 (build: c62a1938)
Message: Missing PDF "http://localhost:8080/hoft/javax.faces.resource/dynamiccontent.properties.xhtml?ln=primefaces&v=6.2&pfdrid=1a55ef4c9448951fae5f493579cf80e1&pfdrt=sc&pfdrid_c=true&download=report.pdf".
有任何线索,我的代码有什么问题?它实际上是demo中的代码,展示了Primeface-Extensions的修改。
我的项目使用 iframe,文档查看器将显示在弹出对话框中。我也尝试了@SessionScoped 和@ViewScoped,但没有运气。
如果我在独立项目中尝试它,它可以工作(没有 iframe)。可能有人可以提供线索,如何调试才能找到问题。
请帮忙....谢谢。
我收到错误消息
pdf.viewer.js.xhtml?ln=primefaces-extensions&v=6.2.9:17581 GET http://localhost:8081/hoft/javax.faces.resource/dynamiccontent.properties.xhtml?ln=primefaces&v=6.2&pfdrid=3c954d24c76c30714a581092c23e1489&pfdrt=sc&pfdrid_c=true&download=report.pdf 404
PDFFetchStreamReader @ pdf.viewer.js.xhtml?ln=primefaces-extensions&v=6.2.9:17581
getFullReader @ pdf.viewer.js.xhtml?ln=primefaces-extensions&v=6.2.9:17527
(anonymous) @ pdf.viewer.js.xhtml?ln=primefaces-extensions&v=6.2.9:4388
(anonymous) @ pdf.viewer.js.xhtml?ln=primefaces-extensions&v=6.2.9:1002
resolveCall @ pdf.viewer.js.xhtml?ln=primefaces-extensions&v=6.2.9:1001
_createStreamSink @ pdf.viewer.js.xhtml?ln=primefaces-extensions&v=6.2.9:1266
MessageHandler._onComObjOnMessage @ pdf.viewer.js.xhtml?ln=primefaces-extensions&v=6.2.9:1094
pdf.viewer.js.xhtml?ln=primefaces-extensions&v=6.2.9:19633 Uncaught (in promise) Error: Missing PDF file.
at pdf.viewer.js.xhtml?ln=primefaces-extensions&v=6.2.9:19633
【问题讨论】:
-
结果代码 404
-
该消息是否在页面加载或按钮按下时出现?如果存在,请为异常提供完整的堆栈跟踪。您在大括号中提到的 IFrame 在哪里?
-
按下按钮后出现。我粘贴错误消息。
-
这看起来像是来自网络浏览器的错误日志。按下按钮时,servlet 容器(服务器端)是否输出或记录带有堆栈跟踪的 Java 异常?
-
我不认为你可以做你正在做的事情。如果您查看它实际呈现的 DocumentViewer 组件,并使用 IFRAME 将文档查看器放入其中。您现在在 IFRAME 中使用 IFRAME,这一定是搞砸了?如果它独立工作,那么你必须一次删除一个变量,直到你弄清楚是什么破坏了它。
标签: java jsf primefaces primefaces-extensions