照例附上项目github链接
本项目实现的是将一个简单的天气预报系统一步一步改造成一个SpringCloud微服务系统的过程,本节主要讲的是通过引入thymeleaf模块构建项目的UI界面。
添加依赖
在pom文件中添加thymeleaf的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
天气预报服务
提供查询天气的接口
定义一个天气预报服务的接口,提供根据根据城市Id查询信息的功能。
@Service
public class WeatherReportServiceImpl implements WeatherReportService{
@Autowired
private WeatherDataService weatherDataService;
@Override
public Weather getDataByCityId(String cityId) {
WeatherResponse resp=weatherDataService.getDataByCityId(cityId);
return resp.getData();
}
}
界面的完善
界面模板内容如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css"
integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb"
crossorigin="anonymous">
<title>猪猪天气预报</title>
</head>
<body>
<div class="container">
<div class="row">
<h3 th:text="${reportModel.title}">waylau</h3>
<select class="custom-select" id="selectCityId">
<option th:each="city : ${reportModel.cityList}"
th:value="${city.cityId}" th:text="${city.cityName}"
th:selected="${city.cityId eq reportModel.cityId}"></option>
</select>
</div>
<div class="row">
<h1 class="text-success" th:text="${reportModel.report.city}">深圳</h1>
</div>
<div class="row">
<p>
空气质量指数:<span th:text="${reportModel.report.aqi}"></span>
</p>
</div>
<div class="row">
<p>
当前温度:<span th:text="${reportModel.report.wendu}"></span>
</p>
</div>
<div class="row">
<p>
温馨提示:<span th:text="${reportModel.report.ganmao}"></span>
</p>
</div>
<div class="row">
<div class="card border-info" th:each="forecast : ${reportModel.report.forecast}">
<div class="card-body text-info">
<p class ="card-text" th:text="${forecast.date}">日期</p>
<p class ="card-text" th:text="${forecast.type}">天气类型</p>
<p class ="card-text" th:text="${forecast.high}">最高温度</p>
<p class ="card-text" th:text="${forecast.low}">最低温度</p>
<p class ="card-text" th:text="${forecast.fengxiang}">风向</p>
</div>
</div>
</div>
</div>
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"
integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
crossorigin="anonymous"></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js"
integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh"
crossorigin="anonymous"></script>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js"
integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ"
crossorigin="anonymous"></script>
<!-- Optional JavaScript -->
<script type="text/javascript" th:src="@{/js/weather/report.js}"></script>
</body>
</html>
js文件内容如下:
/**
* report页面下拉框事件
*
*/
$(function(){
$("#selectCityId").change(function(){
var cityId = $("#selectCityId").val();
var url = '/report/cityId?cityId='+ cityId;
window.location.href = url;
})
});
在Controller层中使用SpringMVC里面的模型以及视图的概念。
需要将城市列表传入模型中,作为下拉框的选择信息提供给用户。
@RestController
@RequestMapping("/report")
public class WeatherReportController {
//返回天气列表使用的
@Autowired
private CityDataService cityDataService;
//返回天气信息使用的
@Autowired
private WeatherReportService weatherReportService;
@GetMapping("/cityId")
public ModelAndView getReportByCityId(String cityId,Model model)throws Exception{
model.addAttribute("title","猪猪天气预报");
model.addAttribute("cityId",cityId);
//返回listget前端,供用户选择
model.addAttribute("cityList",cityDataService.listCity());
model.addAttribute("report",weatherReportService.getDataByCityId(cityId));
return new ModelAndView("weather/report", "reportModel", model);
}
}
增加配置:
spring:
thymeleaf:
cache: false
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。