当前位置: 首页 > news >正文

实验报告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

@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

    <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

@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

    @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

<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

@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

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

        modelAndView.addObject("bookList", Database.getBookList());

        resources/templates目录,list.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

<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

    @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

<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

    @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

    function findBookById(id) {window.location = "/book/find/" + id// $.get("/book/find/" + id)// alert("findBookById:" + id)}

相关文章:

  • Kali Linux入门教程(非常详细)从零基础入门到精通,看完这一篇就够了。
  • 【并发】ThreadLocal 为什么会内存泄露
  • WAF,全称Web Application Firewall,好用WAF推荐
  • Ubuntu上安装Git:简单步骤指南
  • 字母象形:十分有趣的单词扩展逻辑
  • 联想电脑怎么开启vt_联想电脑开启vt虚拟化教程(附intel和amd主板开启方法)
  • 等保测评:企业数字安全的坚实盾牌
  • 【2024.9.29练习】R 格式
  • 在Spring项目中使用MD5对数据库加密
  • 【计算机网络】详解HTTP请求和响应格式常见请求方法Header报头响应报文状态码URL
  • C语言-进程控制编程
  • ceph rgw 桶分片之reshard
  • The Sandbox 游戏制作教程第 6 章|如何使用装备制作出色的游戏 —— 避免环境危险
  • 数据库 - python操作MySQL
  • 【C语言】tcp接收服务
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • AngularJS指令开发(1)——参数详解
  • C# 免费离线人脸识别 2.0 Demo
  • CentOS 7 防火墙操作
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Java小白进阶笔记(3)-初级面向对象
  • js操作时间(持续更新)
  • nodejs:开发并发布一个nodejs包
  • passportjs 源码分析
  • Quartz初级教程
  • 今年的LC3大会没了?
  • 力扣(LeetCode)21
  • 区块链将重新定义世界
  • 使用 QuickBI 搭建酷炫可视化分析
  • 学习笔记TF060:图像语音结合,看图说话
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • # 计算机视觉入门
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (2.2w字)前端单元测试之Jest详解篇
  • (35)远程识别(又称无人机识别)(二)
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (搬运以学习)flask 上下文的实现
  • (多级缓存)多级缓存
  • (三)模仿学习-Action数据的模仿
  • (算法)Travel Information Center
  • (一)appium-desktop定位元素原理
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • ****Linux下Mysql的安装和配置
  • .net core docker部署教程和细节问题
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .Net mvc总结
  • .NET 中创建支持集合初始化器的类型
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • @private @protected @public