如何以Excel / CSV格式导出OpenFaces DataTable?

时间:2011-06-25 16:23:51

标签: jsf datatable export apache-poi openfaces

不幸的是, OpenFaces Datatable 还没有像Primefaces或IceFaces那样的导出功能。 虽然Exporting是小菜一碟,过滤IceFaces或primefaces数据表是一些恐怖电影,但primeFaces的过滤不适用于JSF DataModel(悲伤但真实)。

使用OpenFaces DataTable过滤是一件小事,非常方便和强大。 但是,最终用户想要将他/她过滤的数据表导出为 CSV MS Excel 等格式。

来自OpenFaces的伟大德米特里给了我一个提示: 使用OpenFaces DataTable方法:getDisplayedRowDatas()将从数据表中获取当前显示的行,然后使用某些像Itext这样的第三个库来导出PDF格式。

在我看来,这应该是这样的:

  • 为此目的创建一个支持bean。
  • Apache POI 第三个库添加到类路径
  • 使用Apache POI编写代码以使用方法getDisplayedRowsDatas()导出OpenFaces数据表的内容 - 但我担心此方法不会返回列标题的名称 - 或者抓取OpenFaces呈现的HTML表格数据表作为缓冲字符串,并使用Apache POI生成使用缓冲区流式传输的Excel文件。

在我最近遇到的MyFaces示例中:MyFaces Datatable Export Example,开发人员使用Myfaces组件<t:buffer value=#{myExportBean.myBufferString}> datatable here </t:buffer />将数据表的内容转换为缓冲的String,这使事情变得更容易。不幸的是,JSF Core没有这样的组件。

之前有人碰到过这个吗?非常感谢帮助或更好的替代方案。

1 个答案:

答案 0 :(得分:5)

您可以查看实验性DataTable导出API,该API在当前的每晚构建中可用。如果经得起时间的考验,我们将正式宣布此API。目前,只有CSV导出可用,但您可以为其他格式编写自己的导出器。以下是您应该在操作处理程序中放置的代码,以使其工作:

DataTable myTable = Faces.component("form:myTable", DataTable.class);
myTable.export(new CSVTableExporter());

它导出表格当前显示的所有行和列的数据(当前只导出分页表的当前页面)。