Spring Boot 切换thymeleaf3

2019-07-12  本文已影响0人  一只变强的Hacker

今天在看视频学习spring boot时遇到一点问题,视频时间稍微有点早,而技术发展的又很快,就导致当时的设置现在好像不起作用,现在解决了。

教程教导模板引擎thymeleaf的使用,然而spring boot框架默认给我们设置的是thymeleaf2,这个版本太老了,需要切换到thymeleaf3,按照视频里的教程到官方文档翻了一下,没有找到,于是按照之前的方法,使用thymeleaf前在pom文件里引入如下依赖:

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

切换版本:

    <properties>
        <java.version>1.8</java.version>
        <thymeleaf.version>3.0.0.RELEASE</thymeleaf.version>
        <thymeleaf-layout-dialect.version>2.0.0</thymeleaf-layout-dialect.version>
    </properties>

然后发现,这个方法可以正常运行不会报错,但是在使用时会报错:

报错如下

之后上了thymeleaf的官网看了一下,添加了下面两个依赖

<dependency>
  <groupId>org.thymeleaf</groupId>
  <artifactId>thymeleaf</artifactId>
  <version>3.0.0.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.thymeleaf</groupId>
  <artifactId>thymeleaf-spring4</artifactId>
  <version>3.0.0.RELEASE</version>
</dependency>

同样的错误:

image

google了一下,这篇博文写比较详细

当没有声明ViewResolver时,spring会给你注册一个默认的ViewResolver,就是JstlView的实例, 该对象继承自InternalResoureView。

JstlView用来封装JSP或者同一Web应用中的其他资源,它将model对象作为request请求的属性值暴露出来, 并将该请求通过javax.servlet.RequestDispatcher转发到指定的URL.

Spring认为, 这个view的URL是可以用来指定同一web应用中特定资源的,是可以被RequestDispatcher转发的。

也就是说,在页面渲染(render)之前,Spring会试图使用RequestDispatcher来继续转发该请求。

所以问题就是thymeleaf没有正确引入,所以导致视图解析器不起作用。

最后试了一下引入这两个依赖,properties不需要更改,问题成功解决了:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring4</artifactId>
    <version>3.0.0.RELEASE</version>
</dependency>
上一篇 下一篇

猜你喜欢

热点阅读