Thymeleaf - 严格 HTML 解析问题

Thymeleaf - Strict HTML parsing issue

HTML5 允许更自由地编写一些标签,即没有相应的 END 标签。例如input 不需要关闭 </input>。但是,如果在 Thymeleaf 中选择 模板模式 HTML5,Thymeleaf 引擎会抱怨这一点并且不会解析 HTML 模板。我想覆盖此默认的 Strict 标记检查行为。即 Thymeleaf 应该在没有响应的情况下解析带有元和输入(和类似)标签的 HTML 模板。关闭标签。 PL。指南.

当你有这样的事情时它也会抱怨

<a href="/home/pic/image.png" download="/path/to/file" data-gallery></a>

它在遇到 data-gallery 抛出 "should be followed by '=' " 时抛出异常,这有点烦人,因为它剥夺了 HTML5 的灵​​活性。

您所要做的就是 运行 Thymeleaf 在 "LEGACYHTML5" 模式下,它就像一个魅力。感谢 this and this post,我找到了解决方案并在 SO 中进行了记录,这样其他人在找到这个答案时就不必经历同样的麻烦。

要设置遗留模式,您可以在 Spring XML 文件中定义 bean:

<!-- View TemplateResolver -->
<bean id="templateResolver" class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
    <property name="templateMode" value="LEGACYHTML5"/>
    <property name="cacheable" value="false"/>
</bean>

或将属性添加到 application.properties 文件:

spring.thymeleaf.mode=LEGACYHTML5
spring.thymeleaf.cache=false

并且在这两种情况下,您都必须将 nekohtml jar 添加到您的项目中,或者,如果您是 运行ning maven,则可以将其依赖项添加到您的 pom.xml

<dependency>
     <groupId>net.sourceforge.nekohtml</groupId>
     <artifactId>nekohtml</artifactId>
     <version>1.9.21</version>
 </dependency>

Gradle

'net.sourceforge.nekohtml:nekohtml:1.9.21'

这里是你如何以简洁的方式做到这一点

第 1 步:将 thymeleaf 模式添加到您的 application.properties 文件。

resources/application.properties

spring.thymeleaf.mode=LEGACYHTML5

第 2 步: 将 nekohtml 依赖项添加到 pom.xml 文件。

pom.xml

<dependency>
    <groupId>net.sourceforge.nekohtml</groupId>
    <artifactId>nekohtml</artifactId>
</dependency>

使用 LEGACYHTML5 对我也有用。

还有必要加上

<dependency>
    <groupId>net.sourceforge.nekohtml</groupId>
    <artifactId>nekohtml</artifactId>
</dependency>

到 pom.xml 如上所述。但是还有可能发生的更多步骤。完成这两个步骤后,我得到:

java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal

为避免这种情况,有必要添加

<dependency> 
    <groupId>xml-apis</groupId>
    <artifactId>xml-apis</artifactId>
    <version>1.4.01</version>
</dependency>

到pom.xml