Как экспортировать таблицу данных OpenFaces в формате Excel / CSV? - PullRequest
2 голосов
/ 25 июня 2011

К сожалению, OpenFaces Datatable еще не имеет возможности экспорта в отличие от Primefaces или IceFaces. Несмотря на то, что экспорт является простым делом, фильтрация данных IceFaces или простых лиц - это какой-то фильм ужасов, однако фильтрация PrimeFaces не работает с JSF DataModel (грустно, но верно).

Использование фильтрации OpenTaces DataTable - это очень просто и очень удобно и эффективно. Но как насчет Конечного пользователя, который хочет экспортировать данные, которые он / она фильтровал, в формат, такой как CSV или MS Excel .

Великий Дмитрий из OpenFaces подсказал мне: Используйте метод OpenFaces DataTable: getDisplayedRowDatas(), который будет извлекать отображаемые в данный момент строки из таблицы данных, а затем использовать некоторую библиотеку thrid, например Itext, для экспорта в PDF, например.

В моей голове это должно быть так:

  • Создайте для этой цели вспомогательный компонент.
  • Добавить Apache POI третью библиотеку в путь к классам
  • Написание кода с использованием Apache POI для экспорта содержимого данных OpenFaces с помощью его метода getDisplayedRowsDatas() - но я боюсь, что этот метод не возвращает имена заголовков столбцов - или захватывает таблицу HTML, отображаемую в OpenFaces Datatable, как буферизованной строки и используйте Apache POI для создания файла Excel, передаваемого в буфер.

В примере MyFaces, с которым я недавно сталкивался: Пример экспорта данных MyFaces , разработчик использует компонент Myfaces <t:buffer value=#{myExportBean.myBufferString}> datatable here </t:buffer /> для преобразования содержимого таблицы данных в буферизованную строку, что упрощает работу. JSF Core, к сожалению, не имеет такого компонента.

Кто-то сталкивался с этим раньше? Помощь или лучшие альтернативы очень ценятся.

1 Ответ

5 голосов
/ 29 июня 2011

Вы можете проверить экспериментальный API экспорта DataTable, который доступен в текущей ночной сборке.Мы официально объявим этот API, если он выдержит испытание временем.На данный момент доступен только экспорт CSV, но вы можете написать своих собственных экспортеров для других форматов.Вот код, который вы должны вставить в свой обработчик действий, чтобы он работал:

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

Он экспортирует данные для всех строк и столбцов, как в данный момент отображается таблицей (только текущая страница с разбивкой на страницы).таблица экспортируется в настоящее время).

...