遗憾的是。OpenFaces Datatable 虽然导出是小菜一碟,但过滤一个IceFaces或primefaces的数据表就不那么容易了,然而primefaces的过滤不能和JSF DataModel一起使用(很遗憾,但确实如此)。
使用OpenFaces DataTable过滤是小菜一碟,而且非常方便和强大,但是如果最终用户想导出一个她过滤过的数据表,以这样的格式导出呢?CSV 或 MS Excel.
伟大的Dmitry从OpenFaces,给我一个提示:使用OpenFaces DataTable方法。getDisplayedRowDatas()
它将从一个数据表中抓取当前显示的行,然后使用一些第三库,例如Itext导出为PDF。
在我看来,应该是这样的。
getDisplayedRowsDatas()
- 但恐怕这个方法并不能返回列头的名称--或者抓取OpenFaces Datatable渲染的HTML表作为缓冲字符串,并使用Apache POI生成一个带有Buffer的Excel文件流。在我最近遇到的MyFaces例子中。MyFaces Datatable导出示例,开发者使用Myfaces组件 <t:buffer value=#{myExportBean.myBufferString}> datatable here </t:buffer />
来将datatable的内容转换为一个缓冲的字符串,这使得事情变得更加简单。可惜JSF Core没有这样的组件。
以前有人遇到过这种情况吗?如果有帮助或更好的替代方案,我们将非常感激。
你可以检查一下实验性的DataTable导出API,它在当前的夜间构建中可用。如果这个API经得起时间的考验,我们会正式声明。目前,只有CSV导出可用,但你可以为其他格式编写自己的导出器。以下是你应该放在你的动作处理程序中的代码,以使其工作。
DataTable myTable = Faces.component("form:myTable", DataTable.class);
myTable.export(new CSVTableExporter());
它将导出表格当前显示的所有行和列的数据(当前只导出分页表的当前页)。