【问题标题】:Primefaces excel export is not working - no open/save dialog is shownPrimefaces excel 导出不起作用 - 不显示打开/保存对话框
【发布时间】:2011-10-11 16:00:37
【问题描述】:

我正在尝试使用这样的 primefaces 将 dtos 集合导出到 excel(与 primefaces 展示演示相同,它正在工作)。

<p:commandButton value="Export">
    <p:dataExporter type="xls" target="results" fileName="game_statistics" />
</p:commandButton>

我观察到 firebug 并发出请求,响应也看起来像文件内容,但没有弹出文件保存/打开对话框。 我正在使用 mojarra 2.1.1 和 tomcat 6 作为应用服务器。

【问题讨论】:

    标签: jsf export primefaces xls mojarra


    【解决方案1】:

    &lt;p:commandButton&gt; 默认发送一个 ajax 请求。您不能使用 ajax 下载文件。 Ajax 由 Javascript 执行,但由于安全限制,Javascript 无法强制 Save As 对话并将 ajax 响应传递给它。

    您需要在组件中添加ajax="false"

    <p:commandButton value="Export" ajax="false">
    

    或者只使用普通的&lt;h:commandButton&gt;

    <h:commandButton value="Export">
    

    【讨论】:

      【解决方案2】:

      将其包含在&lt;h:form&gt;...&lt;/h:form&gt; 中,它将起作用 例如:

      <h:form>
      <p:commandButton value="Export">
          <p:dataExporter type="xls" target="results" fileName="game_statistics" />
      </p:commandButton>
      </h:form>
      

      【讨论】:

        【解决方案3】:

        如果您使用动态列,Primefaces 不支持动态列(动态列是指动态列属性值)。您可以使用 POI 作为解决方法,但我不知道您到底想做什么。 给我们看一些代码。 您使用的是哪个版本的 Primefaces?

        【讨论】:

        • 我使用 poi-3.2-FINAL、poi-scratchpad-3.2-FINAL、primefaces-2.2.1、jsf-api-2.1.1-b01、isf-impl-2.1.1-b01。 ..... code ..... code
        • 请编辑/更新您的问题,并在此处添加完整的代码code formatting
        【解决方案4】:

        我有一个表单页面,当我单击commandButton 时,我想从中使用过滤器并应用一些验证,然后从托管 bean(jpa 存储库)中提取数据,但dataExporter 的行为是导出文件,然后如果我再次单击,我会得到正确的结果,因为 bean 在第一次操作时就已经在它上面工作了......

        使用 dataExporter 的 preProcessor 选项作为第一步可以完成这项工作,但我知道这不是正确的方法(应该用于文档格式等),但我没有找到任何其他方法来解决这个(p.s.我的情况是只导出页面数据,不渲染数据表),有没有人有替代/解决方案?

        【讨论】:

        • 预处理器绝不是(100% 确定)打开(或不打开)对话框的解决方案
        • “有人对此有替代/解决方案吗?” 听起来像是一个问题……属于一个新问题……
        • 情况与问题相同,只是bean部分无法正常工作......正如我所说,它可以工作但这样做是不对的,所以我要求另一种选择...... . 反正我没有得到反对意见
        • 由于以下几个原因投反对票:1:没有解决方案的代码 2:没有与 您的 无效的原始问题相关的代码,3:没有与原始问题相关的代码问题 4:无法想象(部分是由于缺少代码)这是该问题的解决方案, 5:因此很难使用其他解决方案来实现 6:我不希望其他人尝试实现它,因为它感觉很hacky,可能刚刚解决了另一个看不见的问题,例如获得新的部署..
        • 如前所述,情况相同,除了 bean 部分,所以我有这样的东西:&lt;h:form prependId="false"&gt; &lt;p:commandButton update=":content:tableResult" ajax="false" action="#{bean.validateSearch()}" &gt; &lt;p:dataExporter target=":content:tableResult" pageOnly="true"/&gt; &lt;/p:commandButton&gt; &lt;/h:form&gt; &lt;h:form prependId="false"&gt; &lt;p:dataTable id="tableResult" value="#{bean.data}" rendered="false"&gt; &lt;/h:form&gt; 这不起作用,除非我使用 commandButton 操作作为 @ dataExporter 中的 987654326@,这不是正确的方法,而是我对上面代码的预期行为。
        猜你喜欢
        • 2013-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-18
        相关资源
        最近更新 更多