实验报告2-前端框架和模板引擎实现视图

资源下载

实验报告2-前端框架和模板引擎实现视图

一、实现思路

Spring Boot整合Thymeleaf实现图书管理案例。要求:

1、项目使用Spring Boot整合Thymeleaf,项目展示的页面效果全部通过Thymeleaf的模板文件实现。

2、查询所有图书。访问http://localhost:8080/book/list时,查询所有图书,并展示在页面中。

3、选择性显示按钮。当Session中存在用户角色为"admin"时,显示"新增"按钮,否则不显示该按钮。

4、按条件查询图书。单击"查询"按钮时,根据搜索框中的查询条件查询对应的图书信息。

5、借阅图书。当图书状态为可借阅时,对应的"借阅"按钮为可用状态,并且单击"借阅"按钮时,将当前申请借阅图书的编号发送到后台。

二、实验步骤

1、新建项目

Name:Exp2,GroupID:com.sw

引入pom.xml文件、定义SpringBoots入口函数

2、测试Html静态页面

com.sw.controller包,BookController.java

java 复制代码
@Controller
@RequestMapping("/book")
public class BookController {
    @RequestMapping("/list")
    public ModelAndView list(){
        ModelAndView modelAndView = new ModelAndView("list");
        return modelAndView;
    }
}

resources/static目录,导入css和js文件

resources/templates目录,导入list.html

html 复制代码
    <link rel="stylesheet" th:href="@{/css/bootstrap.css}">
    <script th:src="@{/js/jquery.min.js}"></script>

3、实现功能

(1)选择性显示按钮

选择性显示按钮。当Session中存在用户角色为"admin"时,显示"新增"按钮,否则不显示该按钮。

com.sw.pojo包,User.java

java 复制代码
@Data
public class User {
    private String username;
    private String role;
    public User(String username, String role) {
        this.username = username;
        this.role = role;
    }
}

com.sw.controller包,BookController.java

java 复制代码
    @RequestMapping("/list")
    public ModelAndView list(String role, HttpSession session){
        ModelAndView modelAndView = new ModelAndView("list");
        session.removeAttribute("user");
        if (!ObjectUtils.isEmpty(role)){
            session.setAttribute("user",new User("zhangsan",role));
        }
        return modelAndView;
    }

resources/templates目录,list.html

html 复制代码
<div class="pull-left" th:if="${#session.getAttribute('user')!=null and #session.getAttribute('user').role=='admin'}">
    <div class="btn-group">
        <button type="button" class="btn btn-default">新增</button>
    </div>
</div>
(2)查询所有图书

访问http://localhost:8080/book/list时,查询所有图书,并展示在页面中。

com.sw.pojo包,Book.java

java 复制代码
@Data
public class Book {
    private Integer id;
    private String name;
    private String author;
    private String press;
    private Date publishDate;
    private BigDecimal price;
    private Integer status;
}

com.sw.pojo包,Database.java

java 复制代码
public class Database {
    public static List<Book> getBookList(){
        List<Book> bookList = new ArrayList<>();
        Book book1 = new Book();
        book1.setPrice(new BigDecimal(66));
        Calendar calendar = Calendar.getInstance();
        calendar.set(2021,9,10);
        book1.setPublishDate(calendar.getTime());
        bookList.add(book1);
        bookList.add(new Book());
        bookList.add(new Book());
        return bookList;
    }
}

com.sw.controller包,BookController.java

java 复制代码
        modelAndView.addObject("bookList", Database.getBookList());

resources/templates目录,list.html

html 复制代码
<tr th:each="book : ${bookList}">
    <td th:text="${book.name}"></td>
    <td th:text="${book.author}"></td>
    <td th:text="${book.press}"></td>
    <td th:text="${#dates.format(book.publishDate,'yyyy-MM-dd')}"></td>
    <td th:text="${#numbers.formatCurrency(book.price)}"></td>
    <td>
        <th:block th:if="${book.status==1}">可借阅</th:block>
        <th:block th:if="${book.status==2}">借阅中</th:block>
        <th:block th:if="${book.status==3}">归还中</th:block>
    </td>
    <td class="text-center">
        <button th:if="${book.status==1}" type="button" class="btn btn-primary btn-xs">借阅</button>
        <button th:if="${book.status==2 || book.status==3}" type="button" class="btn btn-primary btn-xs" disabled="disabled">借阅</button>
    </td>
</tr>
(3)按条件查询图书

单击"查询"按钮时,根据搜索框中的查询条件查询对应的图书信息。

resources/templates目录,list.html

html 复制代码
<form method="post" action="/book/search">
    图书名称:<input name="name">图书作者:<input name="author">
    <input class="btn btn-default" type="submit" value="查询">
</form>

com.sw.controller包,BookController.java

java 复制代码
    @RequestMapping("/search")
    public ModelAndView search(Book bookFront){
        ModelAndView modelAndView = new ModelAndView("list");
        List<Book> bookList = new ArrayList<>();
        if (ObjectUtils.isEmpty(bookFront) ||
                (!ObjectUtils.isEmpty(bookFront)
                        && ObjectUtils.isEmpty(bookFront.getName())
                        && ObjectUtils.isEmpty(bookFront.getAuthor()))){
            bookList = Database.getBookList();
        }else {
            for (Book book : Database.getBookList()) {
                if (!ObjectUtils.isEmpty(bookFront.getName()) && !ObjectUtils.isEmpty(bookFront.getAuthor())){
                    if (book.getName().contains(bookFront.getName()) && book.getAuthor().contains(bookFront.getAuthor())){
                        bookList.add(book);
                    }
                }else if(!ObjectUtils.isEmpty(bookFront.getName())){
                    if (book.getName().contains(bookFront.getName())){
                        bookList.add(book);
                    }
                }else if(!ObjectUtils.isEmpty(bookFront.getAuthor())){
                    if (book.getAuthor().contains(bookFront.getAuthor())){
                        bookList.add(book);
                    }
                }
            }
        }
        modelAndView.addObject("bookList", bookList);
        return modelAndView;
    }
(4)借阅图书

当图书状态为可借阅时,对应的"借阅"按钮为可用状态,并且单击"借阅"按钮时,将当前申请借阅图书的编号发送到后台。

resources/templates目录,list.html

html 复制代码
<button th:if="${book.status==1}" type="button" class="btn btn-primary btn-xs" th:onclick="findBookById([[${book.id}]])">借阅</button>

com.sw.controller包,BookController.java

java 复制代码
    @RequestMapping("/find/{id}")
    public ModelAndView find(@PathVariable Integer id){
        ModelAndView modelAndView = new ModelAndView("list");
            for (Book book : Database.getBookList()) {
                if (book.id == id){
                    bookList.add(book);
                }
            }
        modelAndView.addObject("bookList", bookList);
        return modelAndView;
    }

resources/templates目录,list.html

javascript 复制代码
    function findBookById(id) {
        window.location = "/book/find/" + id
        // $.get("/book/find/" + id)
        // alert("findBookById:" + id)
    }
相关推荐
刘一说6 小时前
深入理解 Spring Boot 嵌入式 Web 容器:从原理到性能调优
前端·spring boot·firefox
程序员小凯6 小时前
Spring Boot文件处理与存储详解
java·spring boot·后端
2501_938774298 小时前
Leaflet 弹出窗实现:Spring Boot 传递省级旅游口号信息的前端展示逻辑
前端·spring boot·旅游
ruleslol9 小时前
SpringBoot13-文件上传02-阿里云OSS
spring boot
蹦跑的蜗牛10 小时前
Spring Boot 使用 Redis 实现消息队列
spring boot·1024程序员节
兜兜风d'10 小时前
RabbitMQ事务机制详解
数据库·spring boot·分布式·rabbitmq·ruby·java-rabbitmq
勇往直前plus11 小时前
学习和掌握RabbitMQ及其与springboot的整合实践(篇二)
spring boot·学习·rabbitmq·java-rabbitmq
一枚码仔11 小时前
SpringBoot启动时执行自定义内容的5种方法
java·spring boot·后端
喜欢读源码的小白11 小时前
【Spring Boot + Spring Security】从入门到源码精通:藏经阁权限设计与过滤器链深度解析
java·开发语言·spring boot·spring security
摇滚侠11 小时前
Spring Boot3零基础教程,JVM 编译原理,笔记87
jvm·spring boot·笔记