在Thymeleaf模板上显示JFreeChart条形图

时间:2017-01-17 06:01:47

标签: java spring-boot thymeleaf jfreechart

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作为图像嵌入到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);
    }

chart.html:

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

        </div>
    </div>

</div>

上面的实现从我遇到的一个例子...... 使用Spring-boot 1.4.3运行它,并在Java jdk1.8.0_111上为MVC,Thymeleaf,Security和JPA提供相关依赖。

任何帮助或指示都将不胜感激。

1 个答案:

答案 0 :(得分:0)

您不想将图表放在模型上。你想写一个servlet,它返回图表的jpg图像,然后让图像src指向该servlet。

如果您在模型上设置了图表,那么您必须将字节数组编码为base64字符串,然后执行以下操作:

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