不幸的是, OpenFaces Datatable 还没有像Primefaces或IceFaces那样的导出功能。 虽然Exporting是小菜一碟,过滤IceFaces或primefaces数据表是一些恐怖电影,但primeFaces的过滤不适用于JSF DataModel(悲伤但真实)。
使用OpenFaces DataTable过滤是一件小事,非常方便和强大。 但是,最终用户想要将他/她过滤的数据表导出为 CSV 或 MS Excel 等格式。
来自OpenFaces的伟大德米特里给了我一个提示:
使用OpenFaces DataTable方法:getDisplayedRowDatas()
将从数据表中获取当前显示的行,然后使用某些像Itext这样的第三个库来导出PDF格式。
在我看来,这应该是这样的:
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没有这样的组件。
之前有人碰到过这个吗?非常感谢帮助或更好的替代方案。
答案 0 :(得分:5)
您可以查看实验性DataTable导出API,该API在当前的每晚构建中可用。如果经得起时间的考验,我们将正式宣布此API。目前,只有CSV导出可用,但您可以为其他格式编写自己的导出器。以下是您应该在操作处理程序中放置的代码,以使其工作:
DataTable myTable = Faces.component("form:myTable", DataTable.class);
myTable.export(new CSVTableExporter());
它导出表格当前显示的所有行和列的数据(当前只导出分页表的当前页面)。