我正在使用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看起来很糟糕。
答案 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
问候!