5

我正在使用 Primefaces 3.4 并尝试使用单元内编辑导出数据表。它似乎不起作用。

我做了以下事情:

修改org.primefaces.component.export.Exporter第 143 行并添加:

else if (component instanceof CellEditor) { // Handle in-cell editable datatables
    return exportValue(context, ((CellEditor) component).getFacet("output"));
}

这导致顶部有一个额外的行,以及带有数据的实际单元格右侧的一个额外列。使用 Excel 文件没问题,因为它们不“可见”,但 PDF 看起来很糟糕。

  1. 有没有办法让 PF 3.4 在不更改源代码的情况下支持这一点?
  2. 如果上述答案是否定的,我可以在没有额外行/列的情况下生成 PDF 吗?
4

4 回答 4

5

有没有办法让 PF 3.4 在不更改源代码的情况下支持这一点?

不,您必须提供您的自定义Exporter实现/覆盖。几个月前我已经将此报告为问题 4013 。它不仅提到CellEditor,而且HtmlGraphicImage(我们使用图像来显示布尔状态,alt我们希望在 PDF/XML/XLS/CSV 报告中显示)。

你所能做的就是给它投票,这样它就有希望得到更多的关注,或者在PF 论坛上重新提问。


如果上述答案是否定的,我可以在没有额外行/列的情况下生成 PDF 吗?

exportable="false"您可以通过设置属性从导出中隐藏列。

<p:column exportable="false">
于 2012-10-03T11:56:10.400 回答
3

有没有办法让 PF 3.4 在不更改源代码的情况下支持这一点?

是的。有一个解决方法

制作两份您的专栏。第一个用于用户,第二个用于dataExporter

通过exportable="false"在第一列中设置,将其从 dataExporter 中隐藏。

通过style="display: none"在第二列中设置,对用户隐藏它。

顺便说一下 dataExporter 不支持 headerText 所以如果你需要你的 headerText 导出你必须使用 old style <f:facet name="header">

<p:column headerText="CLOSE DATE" exportable="false">
    <p:cellEditor>
        <f:facet name="output">
            <h:outputText value="#{sale.closedate}"/>
        </f:facet>
        <f:facet name="input">
            <h:inputText value="#{sale.closedate}"/>
        </f:facet>
    </p:cellEditor>
</p:column>

<p:column style="display: none">
    <f:facet name="header">
         CLOSE DATE
    </f:facet>
    <h:outputText value="#{sale.closedate}"/>
</p:column>

但是这种解决方法丑陋,并且会使您的 dataTable 大小增加一倍并且难以呈现

正如 BalusC 提到的,我们需要通过投票或在他们的论坛上发帖来提高对这个问题的认识。

于 2012-10-03T12:31:43.190 回答
1

到目前为止,我发现的唯一解决方案是创建自己的类来扩展 Exporter 并覆盖 method protected String exportValue(FacesContext context, UIComponent component)。你应该只添加 else if (component instanceof CellEditor) { return exportValue(context, ((CellEditor) component).getFacet("output")); }

于 2013-07-25T14:23:24.830 回答
0

答案是……用单元格编辑器创建一个数据表……

然后创建一个没有单元格编辑器但相同字段的另一个表到

出口商应该参考第二张表,它是!:D

问候!

于 2013-06-07T20:29:03.413 回答