Отображение гистограммы JFreeChart на шаблоне Thymeleaf

Новый для Thymeleaf и JFreechart. Я должен отображать несколько гистограмм на одной html-странице. Из исследования того, как это сделать, я нашел пример использования Thymeleaf, как показано ниже:

    JFreeChart chart = createChart(pdSet, "Test Pie Chart using JFreeChart");

    try{
        ChartUtilities.writeChartAsPNG(response.getOutputStream(), chart, 750, 400);
        response.getOutputStream().close();
    } catch(IOException ex) {
        ex.printStackTrace();
    }

Я должен быть в состоянии передать визуализированную диаграмму в модель, чтобы иметь возможность встроить в html как изображение. Я попытался передать это как массив байтов, но безуспешно.
Код контроллера :

    JFreeChart chart = ChartFactory.createBarChart(null, null, null, bardataset, PlotOrientation.VERTICAL, false, false, false);
    File file = new File("barchart.jpg");

    try {
        ChartUtilities.saveChartAsJPEG(new File(filename), chart, 800, 100);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }  
    if (clientList != null){
        model.addAttribute("chart", chart);
    }

таблица.формат html:

    <div>
        <p> Bar Graph</p>
        <div>
            <img th_src="@{~/chart}" width="1000"/>

        </div>
    </div>

</div>

Вышеприведенная реализация из примера мне попалась…
Запуск этого с Spring-boot 1.4.3 со связанными зависимостями для MVC, Thymeleaf, Security и JPA на Java jdk1.8.0_111.

Любая помощь или направление будут оценены.

1 ответ

  1. Вы не хотите помещать диаграмму на модель. Вы хотите написать сервлет, который возвращает изображение jpg диаграммы, а затем иметь точку src изображения на этом сервлете.

    Если у вас есть мертвая установка с диаграммой на модели, вам придется кодировать массив байтов как строку base64, а затем сделать что-то вроде этого:

    <img src="data:image/jpg;base64,BASE64ENCODEDSTRINGHERE" />