zoukankan      html  css  js  c++  java
  • thymeleaf Exception processing template "xxx": Exception parsing document: template="xxx", line 6

    我是在SpringBoot项目使用Thymeleaf作为模板引擎时报的错误

    controller代码非常简单,如下所示:

        @RequestMapping("/abc")
        public String hello(Model model) {
            model.addAttribute("msg","你好");
            return "success";
        }

    前端success.html也很简单,代码如下:

    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div th:text="${msg}">信息</div>
    </body>
    </html>

    控制台报错如下:

    2019-12-17 11:11:18.333 ERROR 2300 --- [nio-8080-exec-3] org.thymeleaf.TemplateEngine             : 
      [THYMELEAF][http-nio-8080-exec-3] Exception processing template "success": Exception parsing document: template="success", line 6 - column 3
    2019-12-17 11:11:18.335 ERROR 2300 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : 
      Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; 
      nested exception is org.thymeleaf.exceptions.TemplateInputException:
         Exception parsing document: template="success", line 6 - column 3] with root cause
    
    org.xml.sax.SAXParseException: 元素类型 "meta" 必须由匹配的结束标记 "</meta>" 终止。
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203) ~[na:1.8.0_161]
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177) ~[na:1.8.0_161]
        at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400) ~[na:1.8.0_161]

    前端报错如图:

     通过console控制台的【Exception parsing document: template="success", line 6 - column 3]】报错可以看出,thymeleaf在解析success.html的第六行时发生了错误。报错原因控制台也列出来了,即: 元素类型 "meta" 必须由匹配的结束标记 "</meta>" 终止

    解决方法一

    解决方法之一,就是我们将success.html文件的meta标签添加封闭符号,即加上斜杠即可,如下图:

    结果:

    解决办法二

    在spring中使用thymeleaf的时候,会对html进行严格的语法校验,比如在本例中,页面html缺少了封闭符号/,就会报错而转到错误页。这实际并没有什么必要。因此,在第二种解决方法中,我们可以设置使得thymeleaf对html非严格检查。

    1)在maven中添加依赖

            <!--引入NekoHTML,配合spring.thymeleaf.mode=LEGACYHTML5使用,使Thymeleaf 可以解析非严格html格式的文档-->
            <dependency>
                <groupId>net.sourceforge.nekohtml</groupId>
                <artifactId>nekohtml</artifactId>
                <version>1.9.22</version>
            </dependency>

    2)在application.properties全局配置文件中加入如下配置

    spring.thymeleaf.mode=LEGACYHTML5

     注:默认spring.thymeleaf.mode=HTML5,是严格检查 。LEGACYHTML5需要搭配NekoHTML库才可用,实现thymeleaf非严格检查。

    解决方法3

    在我的例子中,默认使用的是2.1.6版本的thymeleaf

     

     通过thymeleaf3官方文档,得知可以用以下方法来修改thymeleaf版本,即在pom的properties标签加入如下配置

        <properties>
            <thymeleaf.version>3.0.9.RELEASE</thymeleaf.version>
            <!-- 布局功能的支持程序  thymeleaf3主程序  layout2以上版本 -->
            <!-- thymeleaf2   layout1-->
            <thymeleaf-layout-dialect.version>2.2.2</thymeleaf-layout-dialect.version>
        </properties>

    在更新thymeleaf版本到3以上之后,就不会因为缺少结束标签而报错了。

  • 相关阅读:
    Linux的kobject机制
    利用内核模块添加系统调用
    register_sysctl_table实现内核数据交互
    设计模式17---享元模式
    设计模式16---中介者模式
    java实现PV操作
    设计模式15---桥接模式
    设计模式15---迭代器模式
    设计模式14---组合模式
    设计模式13---备忘录模式
  • 原文地址:https://www.cnblogs.com/suhaha/p/12054023.html
Copyright © 2011-2022 走看看