Spring Web Flow — создание PDF и Excel документов

Spring Web Flow — пример генерации PDF или Excel документа

В статье будет рассмотрено как создать PDF или Excel документ на основе данных из Java объекта с использованием фреймворка Spring Web Flow и Spring MVC.

Используемые технологии:
  • Spring WEB Flow 2.4.1
  • Spring Framework 4.1.5
  • iTextPDF 5.5.1
  • Apache POI 3.10-FINAL
  • JSF 2.2
  • PrimeFaces 5.2.RC1
  • Maven 3.2.5
  • IntelliJ IDEA 14.1.4
  • JDK 1.8

1. Структура проекта

SWF PDF structure

Пример основан на приложении SWF Hello World. Здесь были добавлены java классы для работы с pdf и excel документами, а так же два класса для предоставления данных.

2. Настройки pom.xml Maven

Здесь используются две популярных библиотеки для работы с pdf и excel документами:

Библиотеки предоставляют очень широкие возможности для работы с данным типом документов и я рекомендую ознакомится с их документацией для понимания всех доступных вариантов использования библиотек.

3. Настройка web.xml

Стандартные настройки дескриптора развертывания при использовании Spring Web Flow, JSF, Primefaces и Spring MVC.

4. Настройка webflow.xml

Для работы с pdf или excel в webflow.xml также ничего не нужно добавлять к базовым настройкам.

5. Настройка dispatcher-servlet.xml

Здесь добавлены несколько бинов. Рассмотрим их по порядку:

Включает поддержку маппинга запросов с помощью Spring MVC.

Используется для генерации xls документа. Ниже представлены настройки utils-config.xml:

Как видно здесь просто объявлен поиск бинов в пакете ru.javastudy, а так же бин ExcelView.

Этот бин используется для поиска представлений, которые были возвращены с помощью контроллера. В нашем примере в классе PDFController будет возвращаться такая конструкция:

В модели будет записано представление «pdfView«, но его не существует в виде pdfView.xhtml. Вместо этого viewPDFResolver будет искать это представление в файле views.properties. Обратите внимание на атрибут name=»order» value=»0» для бинов MVC. Если поменять порядок бинов MVC и Web Flow, то представления не будут найдены и вы получите ошибку 404.

5.1. views.poperties

Когда Spring MVC получит в модели представление pdfView, то будет использоваться класс PDFBuilder.

6.1. Создание и работа с PDF документом

Для работы с PDF документом нам понадобятся три класса: AbstractITextPdfView, PDFBuilder, PDFController.

AbstractITextPdfView:

У Spring MVC есть встроенный класс для работы с PDF документами — org.springframework.web.servlet.view.document.AbstractPdfView. Но дело в том, что он использует устаревшие библиотеки (например com.lowagie.text.pdf.PdfWriter) и поэтому мы заменяем этот класс своим, но используем уже современную библиотеку iTextPDF 5.5.1.

PDFBuilder:

Этот класс создает PDF документ с использованием предоставленных в модели данных (в нашем случае список котиков, который мы поместим в модель в классе PDFController). В целом названия методов говорят сами за себя и я думаю не требуют пояснений.

PDFController:

В контроллере мапятся два URI — первый, downloadPDF, вызывается через нажатие на обычную ссылку <a href=»app/downloadPDF> </a>. Так же сюда мы будем попадать через использование кнопки кнопку <p:commanButton action=»flowPDF»/>. Внутри flow.xml, который будет описан ниже, есть transition, который будет срабатывать при нажатии на эту кнопку, а дальше выполнится редирект на /downloadPDF.

Второй метод flowPDF() будет вызываться при нажатии кнопки под таблицей p:dataTable, отображающей еще один набор данных.

Замечание

Данные для модели во втором методе flowPDF() вытаскиваются напрямую из бина CatsFactory, который внедряется через аннотацию Inject. Эти же данные используются для построения таблицы в представлении start.xhtml.

6.2. Работа с Excel документом

ExcelView:

ExcelController:

Работа с Excel документом в целом аналогична работе с PDF. Разве что здесь используется библиотека Apache POI. Еще раз посмотрите как вызывается бин ExcelView из описания диспетчера сервлетов (beans:bean id=»viewExcelResolver»).

7. Описание потока flow.xml и представление start.xhtml.

start.xhtml:

Попасть в контроллер можно либо нажав на p:commandButton после обработки действия соответствующим transition или же напрямую кликнув по ссылке. Так же для примера создана таблица с уже другими (по отношению к первым кнопкам и ссылкам) данными. И показано как можно создать документ с данными из таблицы.

flow.xml:

Описание потока очень простое. Обработка переходов происходит после нажатия на кнопку с соответствующим action.

8. Пример работы приложения

Первая страница:

SWF PDF first page

Если кликнем на ссылку или кнопку перед таблицей:

SWF PDF view page

Если нажать на кнопку после таблицы:

SWF PDF view page2

 

 

Исходные коды

SWF Download PDF

Share Button
3
4905 Total Views 1 Views Today

Добавить комментарий