我在使用 XDocReport 从数据库生成不同文件的当前项目中遇到了这个问题。现在已经是尝试失败的日子了。
这是交易:我有一个downloadPptx
方法,用于生成和开始下载一些数据的 pptx 报告。我从一个commandlink
我认为应该在单击它时开始下载的地方调用它,但实际上并没有。
我在 stackoverflow 上遵循了 BalusC 的几个指南,包括这个或另一个,但从来没有开始下载。但是,该方法是在单击时调用的,因为我显示了一些日志。
这是我的代码摘录:
public void downloadPptx() {
IXDocReport doc = null;
FacesContext fc = FacesContext.getCurrentInstance();
ExternalContext ec = fc.getExternalContext();
int idRef = Integer.parseInt(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("ref"));
String fileName = idRef+".pptx";
try {
// [...] Generating document with XDocReport
ec.responseReset();
ec.setResponseContentType("application/vnd.openxmlformats-officedocument.presentationml.presentation");
ec.setResponseHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
doc.process(context, ec.getResponseOutputStream());
fc.responseComplete();
} catch (XDocReportException e) {
log.debug(e.getMessage());
} catch (IOException e) {
log.debug(e.getMessage());
}
}
这是我的 bean 的方法(从无关紧要的事情中清理了一点),这是我页面的摘录:
<p:commandLink action="#{viewRef.downloadPptx}" immediate="true">
<p:graphicImage url="ressources/img/ppt.png" />
<f:param name="ref" value="#{viewRef.reference.idRef}"/>
</p:commandLink>
我尝试了几件事,从使用缓冲区传输到在网页中使用 ajax,但似乎没有任何效果,我想我一定是遗漏或误解了一些东西。我也尝试生成一个text/plain
文件,但它没有任何改变。