Как правильно организовать экспорт в Excel в Spring-MVC

487
04 января 2017, 02:14

Добрый день. Есть контроллер в котором есть метод поиска.

    @RequestMapping(value = "/search", method = RequestMethod.POST)
public String search(@RequestParam Integer idProvider, @RequestParam String department,
        @RequestParam String carNumber,
        @RequestParam("arrivalDate") @DateTimeFormat(iso = ISO.DATE) LocalDate startDate,
        @RequestParam("arrivalDate") @DateTimeFormat(iso = ISO.DATE) LocalDate endDate,
        @ModelAttribute("idAttribute") Supply supply, Model model) throws DaoException {
    List<Supply> supplyList = supplyDao.searchByCriteria(idProvider, department, carNumber, startDate, endDate);
    model.addAttribute("supplyList", supplyList);
    return "searchList";

Данный метод выводит результаты поиска на JSP страницу. Как правильно организовать экспорт этих данных в Excel?

Я создал класс для создание документа:

    public class ExcelBuilder extends AbstractXlsxView {
private static final DateFormat DATE_FORMAT = DateFormat.getDateInstance(DateFormat.SHORT);
@Override
protected void buildExcelDocument(Map model, Workbook workbook, HttpServletRequest request,
        HttpServletResponse response) throws Exception {
    // change the file name
    response.setHeader("Content-Disposition", "attachment; filename=\"report.xls\"");
    @SuppressWarnings("unchecked")
    LinkedList<Supply> supplyes = (LinkedList<Supply>) model.get("supplyList");
    // create excel xls sheet
    Sheet sheet = workbook.createSheet("Отчет");
    // create header row
    Row header = sheet.createRow(0);
    header.createCell(0).setCellValue("Дата поставки");
    header.createCell(1).setCellValue("Номер автомобиля");
    header.createCell(2).setCellValue("Фамилия водителя");
    header.createCell(3).setCellValue("Телефон");
    header.createCell(4).setCellValue("Отдел");
    header.createCell(5).setCellValue("Товар");
    header.createCell(6).setCellValue("Документ поставщика");
    header.createCell(7).setCellValue("Документ получателя");
    header.createCell(8).setCellValue("Кладовщик");
    header.createCell(9).setCellValue("Диспетчер");
    // Create data cells
    int rowCount = 1;
    for (Supply supply : supplyes) {
        Row supplyRow = sheet.createRow(rowCount++);
        supplyRow.createCell(0).setCellValue(DATE_FORMAT.format(supply.getArrivalDate()));
        supplyRow.createCell(1).setCellValue(supply.getCarNumber());
        supplyRow.createCell(2).setCellValue(supply.getDriverName());
        supplyRow.createCell(3).setCellValue(supply.getPhone());
        supplyRow.createCell(4).setCellValue(supply.getDepartment());
        supplyRow.createCell(5).setCellValue(supply.getProduct());
        supplyRow.createCell(6).setCellValue(supply.getVendorDocument());
        supplyRow.createCell(7).setCellValue(supply.getDocumentReceiving());
        supplyRow.createCell(8).setCellValue(supply.getStorekeeper());
        supplyRow.createCell(9).setCellValue(supply.getDispatcher());
    }
}

}

Далее создал метод в контроллере:

    @RequestMapping(value = "/downloadExcel", method = RequestMethod.GET)
public  ModelAndView downloadExcel(@ModelAttribute("supplyList") Supply supply) {
    //return new ModelAndView("excelView2");        
}

Насколько я понял для экспорта в Excel можно использовать только ModelAndView.

Вопрос: как передать данные из supplyList в новую модель для сохранения в Excel?

Посоветуйте как лучше сделать? Заранее благодарен.

READ ALSO
Пример запроса Twitter Api android

Пример запроса Twitter Api android

Не могу найти ни один пример запроса Twitter Api androidЕсли кто может - предоставьте пример выполнения такого запроса в android

626
MouseListener в Java

MouseListener в Java

Как отловить события mousePressed и mouseReleased где в этот момент находится курсор, а потом получить объект над которым это событие происходит? Можно...

585
Screen overlay после появление окна с permissions

Screen overlay после появление окна с permissions

Получаю "Screen overlay detected, To change this permission setting", you first have to turn off the screen overlay from Settings > Apps" (на Samsung S7 Edge), после нажатия Allow в окне с permissions, на Samsung S6 такой...

463
Как получать координаты в потоке?

Как получать координаты в потоке?

Есть приложение в нём через google api client получаю данные о моём местоположении, если точнее — широту и долготуМожно ли это делать в потоке или...

462