使用SpringBoot、Thymeleaf以及chart.min.js在页面上生成一张某个教师的所有年月工资信息的柱状统计图,并且将工资所属年月和相应的工资金额添加到柱状统计图的数据中
时间: 2023-07-14 20:12:23 浏览: 203
首先,需要在SpringBoot中引入Thymeleaf和chart.min.js的依赖。可以在pom.xml文件中添加以下内容:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>chartjs</artifactId>
<version>2.9.4</version>
</dependency>
```
然后,在SpringBoot中创建一个Controller,接收教师的ID,并查询该教师的所有年月工资信息。可以使用JPA或MyBatis等框架来实现数据库的查询操作。查询结果可以存储在一个List中,每个元素包含工资所属年月和相应的工资金额。
接下来,可以使用Thymeleaf来渲染页面。在HTML页面中,需要引入chart.min.js的JS文件,并定义一个Canvas元素,用于绘制柱状统计图。具体代码如下:
```html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>教师工资统计图</title>
<script src="/webjars/chartjs/2.9.4/dist/Chart.min.js"></script>
</head>
<body>
<div>
<canvas id="myChart"></canvas>
</div>
<script th:inline="javascript">
var ctx = document.getElementById('myChart').getContext('2d');
var data = {
labels: /*[[${labels}]]*/,
datasets: [{
label: '工资金额',
data: /*[[${data}]]*/,
backgroundColor: 'rgba(54, 162, 235, 0.2)',
borderColor: 'rgba(54, 162, 235, 1)',
borderWidth: 1
}]
};
var options = {
scales: {
yAxes: [{
ticks: {
beginAtZero: true
}
}]
}
};
var myChart = new Chart(ctx, {
type: 'bar',
data: data,
options: options
});
</script>
</body>
</html>
```
在JS代码中,首先获取Canvas元素的上下文对象ctx,然后定义柱状统计图的数据和样式。其中,labels数组存储工资所属年月,data数组存储相应的工资金额。这两个数组可以通过Thymeleaf从Java Controller中传入的Model对象中获取。最后,使用Chart对象的构造函数创建柱状统计图,并将其绘制到Canvas元素上。
在Java Controller中,需要将查询结果转换成Thymeleaf所需要的数据格式,并将其存储在Model对象中。具体代码如下:
```java
@GetMapping("/teacher/{id}/salary")
public String showSalaryChart(@PathVariable Long id, Model model) {
List<Salary> salaries = salaryService.findSalariesByTeacherId(id);
List<String> labels = new ArrayList<>();
List<Double> data = new ArrayList<>();
for (Salary salary : salaries) {
labels.add(salary.getYearMonth());
data.add(salary.getAmount());
}
model.addAttribute("labels", labels);
model.addAttribute("data", data);
return "salary-chart";
}
```
在该方法中,首先查询指定教师的所有年月工资信息,并将其存储在salaries列表中。然后,遍历该列表,将工资所属年月和相应的工资金额分别存储在labels和data列表中。最后,将这两个列表存储在Model对象中,并返回Thymeleaf视图名称。在Thymeleaf视图中,可以通过${labels}和${data}来获取这两个列表,在JS代码中绘制柱状统计图。
阅读全文