不幸的是,OpenFaces数据表还没有Primefaces或IceFaces那样的导出功能。虽然导出是小菜一碟,但过滤IceFaces或primefaces数据表并不容易,然而PrimeFace的过滤不适用于JSF数据模型(可悲但真实)。
使用OpenFaces DataTable过滤是小菜一碟,而且非常方便和强大。但是,最终用户想要将其筛选的数据表导出为CSV或MSExcel之类的格式呢。
来自OpenFaces的伟大的德米特里给了我一个提示:使用OpenFaces DataTable方法:getDisplayedRowDatas()
,它将从数据表中获取当前显示的行,然后使用像Itext这样的三次库以PDF格式导出。
在我看来,这应该是这样的:
- 为此目的创建一个backingbean
- 将Apache POI第三个库添加到类路径
- 使用Apache POI编写代码,用它的方法
getDisplayedRowsDatas()
导出OpenFaces数据表的内容,但我担心这个方法不会返回列标题的名称,或者将OpenFaces datatable呈现的HTML表作为缓冲字符串,并使用Apache POIs生成一个用Buffer流式传输的Excel文件
在我最近遇到的MyFaces示例:MyFaces Datatable Export example中,开发人员使用MyFaces组件<t:buffer value=#{myExportBean.myBufferString}> datatable here </t:buffer />
将数据表的内容转换为缓冲字符串,这使事情变得更容易。不幸的是,JSF核心没有这样的组件。
以前有人碰到过这个吗?我们非常感谢您的帮助或更好的选择。
您可以查看实验性DataTable导出API,它在当前夜间构建中可用。如果API经得起时间的考验,我们将正式宣布它。目前,只有CSV导出可用,但您可以为其他格式编写自己的导出程序。以下是您应该放在操作处理程序中以使其工作的代码:
DataTable myTable = Faces.component("form:myTable", DataTable.class);
myTable.export(new CSVTableExporter());
它导出表当前显示的所有行和列的数据(当前仅导出分页表的当前页面)。