照例附上项目github连接javascript
本项目实现的是将一个简单的天气预报系统一步一步改形成一个SpringCloud微服务系统的过程,本节主要讲的是经过引入thymeleaf模块构建项目的UI界面。css
在pom文件中添加thymeleaf的依赖html
<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(); } }
界面模板内容以下:java
<!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文件内容以下:jquery
/** * report页面下拉框事件 * */ $(function(){ $("#selectCityId").change(function(){ var cityId = $("#selectCityId").val(); var url = '/report/cityId?cityId='+ cityId; window.location.href = url; }) });
在Controller层中使用SpringMVC里面的模型以及视图的概念。
须要将城市列表传入模型中,做为下拉框的选择信息提供给用户。git
@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); } }
增长配置:github
spring: thymeleaf: cache: false