Скачать файл для события "itemSelect" для p: chart (pie) - PullRequest
0 голосов
/ 17 июня 2019

У меня есть график (круговая диаграмма), который я использую для визуализации статистики. Я хочу добавить действие загрузки AJAX для этого компонента, чтобы загрузить файл Excel, созданный мной из компонента EJB. Это действие необходимо выполнить при возникновении события itemSelect.

XHTML:

<h:form id="formRelanceDbePieChartId">
            <p:panel styleClass="lvl-2" id="widgets-statistique-dbe" toggleable="true">
                <f:facet name="header">Statistiques DBE</f:facet>
                <p:chart type="pie" model="#{widgetsBacking.pieModelRelanceDbe}">
                    <p:ajax event="itemSelect"   listener="#{relanceDbeControleur.test()}" />
                </p:chart>
            </p:panel>
</h:form>

Bean:

public void test() {

        ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
        HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();

        BufferedInputStream input = null;
        BufferedOutputStream output = null;
        List<RegistreRelanceDbeDto> listRelanceDbeDto = relanceDbeFacade.recupererListStockDbeCollecter();
        if (CollectionUtils.isEmpty(listRelanceDbeDto)) {
            logger.fine(() -> "TDB exporterStockDbeAcollecter : La liste listRelanceDbeDto est vide");
        }
        String nomFeuille = "stockDbeACollecter";
        try {
            byte[] bytes = exportExcelService.genererExcel(listRelanceDbeDto, nomFeuille, null);
            input = new BufferedInputStream(new SharedByteArrayInputStream(bytes), 10240);
            response.reset();
            response.setHeader("Content-Type", "charset=UTF-8");
            response.setHeader("Content-Disposition", "attachment; filename=\"" + "liste_stock_dbe_collecter.xlsx" + "\"");
            output = new BufferedOutputStream(response.getOutputStream(), 10240);

            byte[] buffer = new byte[10240];
            int length;
            while ((length = input.read(buffer)) > 0) {
                output.write(buffer, 0, length);
            }

            output.flush();
            output.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            close(output);
            close(input);
        }
        FacesContext.getCurrentInstance().responseComplete();
        FacesContext.getCurrentInstance().renderResponse();
    }

Когда я нажимаю на круговую диаграмму, запускается метод test (), но диалоговое окно сохранения не отображается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...