Primefaces数据导出器

时间:2014-03-20 15:20:48

标签: jsf-2 primefaces

我正在使用p:dataExporter将数据导出到客户端计算机。它根据tareget方法中提到的表中的数据创建给定格式的文件。在导出按钮单击文件将导出到客户端计算机。这一切都很好。 现在我想提供一个“打开”按钮,让文件打开/不用将文件下载到客户机。 p:dataExporter没有这样的属性。 JSF是否提供此类属性或推荐的任何其他组件?

这是我的代码示例

<p:dataExporter type="#{applicationFilterBean.exportFileType}" target=":appForm:appTable"
                            fileName="#{applicationFilterBean.exportFileName}" />

2 个答案:

答案 0 :(得分:1)

感谢你的建议Michele,我已经创建了我的customExport类。唯一需要做的改变是将responseHeader更改为Content-Disposition-inline,

response.setHeader("Content-disposition", "inline;filename="+ fileName + ".pdf");

这是完全正常的。

答案 1 :(得分:0)

不可能因为内容处理是硬编码。

例如,查看org.primefaces.component.export.PDFExporter源代码:

protected void writePDFToResponse(ExternalContext externalContext, ByteArrayOutputStream baos, String fileName) throws IOException, DocumentException {     
    externalContext.setResponseContentType("application/pdf");
    externalContext.setResponseHeader("Expires", "0");
    externalContext.setResponseHeader("Cache-Control","must-revalidate, post-check=0, pre-check=0");
    externalContext.setResponseHeader("Pragma", "public");
    externalContext.setResponseHeader("Content-disposition", "attachment;filename="+ fileName + ".pdf");
    externalContext.setResponseContentLength(baos.size());
    externalContext.addResponseCookie(Constants.DOWNLOAD_COOKIE, "true", Collections.<String, Object>emptyMap());
    OutputStream out = externalContext.getResponseOutputStream();
    baos.writeTo(out);
    externalContext.responseFlushBuffer();
}

也许其他一些库提供此功能,否则您应该开发自己的DataExporter。