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
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