1

照例附上项目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



测试结果

在这里插入图片描述


Shimmer
105 声望30 粉丝

A Pig.