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

Han*_*sky 2 datatable jsf export apache-poi openfaces

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

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

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

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

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

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

有人曾经遇到过这个吗?非常感谢帮助或更好的替代方案.

小智 5

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

DataTable myTable = Faces.component("form:myTable", DataTable.class);
myTable.export(new CSVTableExporter());
Run Code Online (Sandbox Code Playgroud)

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