Primefaces 3.4 dataexporter不导出值p:cellEditor

时间:2012-10-03 09:14:00

标签: java jsf primefaces

我正在使用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 个答案:

答案 0 :(得分:5)

  

有没有办法让PF 3.4支持这个而不改变源代码?

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

您所能做的就是投票支持它,以便有希望获得更多关注,或者通过PF forum重新提问。


  

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

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

<p:column exportable="false">

答案 1 :(得分:3)

  

有没有办法让PF 3.4支持这个而不改变源代码?

是。有一个解决方法

制作两列副本。 第一个用于用户,第二个用于 dataExporter

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

通过在第二列中设置style="display: none",将其隐藏在用户之外。

顺便说一句,dataExporter不支持headerText,所以如果你需要导出headerText,你必须使用旧样式<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所说,我们需要通过投票或在论坛上发帖来提高对这个问题的认识。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

答案是......使用单元格编辑器创建数据表....

并在创建一个没有单元格编辑器但是相同字段的其他表之后  

导出器应该引用第二个表,它是! :D

问候!