【问题标题】:Primefaces data exporterPrimefaces 数据导出器
【发布时间】:2014-03-20 15:20:48
【问题描述】:

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

这是我的代码示例,

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

【问题讨论】:

    标签: jsf-2 primefaces


    【解决方案1】:

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

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

    这一切都很好。

    【讨论】:

      【解决方案2】:

      不,这是不可能的,因为内容处置是硬编码的。

      比如翻看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。

      【讨论】:

        猜你喜欢
        • 2014-05-26
        • 1970-01-01
        • 2013-07-17
        • 1970-01-01
        • 1970-01-01
        • 2014-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多