今天一个同志在b站回复了我的回复,就是当时学习SpringBoot的时候的评论,大概的问题就是说在thymeleaf中没有办法使用 对象.对象的get方法,然后我就仔细的研究了一下。
简单来说就是 使用thymeleaf的each之后,没有办法使用对象的get方法。 这里我就研究了一下SpringMVC的运行流程(之前也有涉及)
先记住几个概念,前端控制器 DispatcherServlet,处理器映射器 HandlerMapping,处理器执行链 HandlerExecutionChain,处理器适配器 HandlerAdapter,视图解析器ViewResolver
1、客户端请求到前端控制器(dispatcherServlet) 2、前端控制器(dispatcherServlet)请求处理器映射器(HandlerMapping), 3、处理器映射器(HandlerMapping)根据url查找相应的处理器(Handler),返回处理器执行链(HandlerExecutionChain)给前端控制器(DispatcherServlet) 4、前端控制器(DispatcherServlet)请求处理器适配器(HandlerAdapter), 5、处理器适配器(HandlerAdapter)执行处理器(Handler),生成ModelAndView,返回ModelAndView给前端控制器(DispatcherServlet) 6、前端控制器(DispatcherServlet)请求视图解析器(ViewResolver) 7、视图解析器(ViewResovler)返回视图对象给前端控制器(DispatcherServlet) 8、最后渲染视图
百度一大堆的
说白了,就是知识的科普,随便说说,自己来实现这个过程,就是从controller到View的数据传输。 下面就是实现这个过程,先声明,说思路,如果你照抄代码的很大可能是没有办法正常运行的。目的就是让读者能够真正的懂。
定义一个Book类 import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.Date; @Data // 这里使用的是lombok的@Data注解,如果不使用这个注解,就要自定义getter和setter方法,如何使用lombok得自己百度一下 @AllArgsConstructor // 这个注解就是包含所有参数的构造方法 @NoArgsConstructor // 这个注解就是无参构造方法 public class Book { Long id; String bookName; Date date; } 定义一Controller @Controller public class BookController { @GetMapping(value = "/books") public String getBooks(Model model){ /** * 这个类很简单,就是定义一个路径,返回到booksList这个界面,带着model数据 */ Book book = new Book((long) 1, "数据结构", new Date()); // Book导入自己方才定义的类, Date 也在util中 List<Book> list = new ArrayList<>(); // List和ArrayList很清楚都在java.util中 list.add(book); model.addAttribute("books", list); // 这里model.add.. 就是用model来保存数据 return "booksList"; // 这里的booksList就是View,就是解析器需要解析的 } } 定义一个视图booksList <table> <thead> <tr> <td>id</td> <td>name</td> <td>date</td> </tr> </thead> <tbody> <!--这里就是使用thymeleaf来获取数据,前提是文件得有xmlns:th="http://www.thymeleaf.org" 设置--> <!--th:each 基础使用--> <tr th:each="book:${books}"> <td th:text="${book.getId()}"></td> <td th:text="${book.getBookName()}"></td> <td th:text="${book.getDate()}"></td> </tr> </tbody> </table>输出:
不用说你们看完之后,代码完全不能用。 我这里提出三个注意点: 1、BookController是否使用了@Controller注解? 2、Book类属性是否有get方法? 3、booksList 上面是否有 设置 <html lang="en" xmlns:th="http://www.thymeleaf.org">?
慢慢的理解体会,多看一些文章,第一遍可能不懂,但是当你再次遇见,你再去看,你就会懂了。