Spring Boot 和 Thymeleaf - 删除严格的 HTML 错误检查
Posted
技术标签:
【中文标题】Spring Boot 和 Thymeleaf - 删除严格的 HTML 错误检查【英文标题】:Spring Boot & Thymeleaf - remove strict HTML error checking 【发布时间】:2015-10-26 03:03:59 【问题描述】:我正在将 Spring Boot 用于 MVC 应用程序,我的视图技术是 Thymeleaf。我需要做的一件事是复制现有网站的 html(不是我做的......)并使用 Thymeleaf 呈现它。但是,一些网站的源 HTML 包含未闭合的 HTML 标签(例如<meta>
、<link>
、<input>
),或者带有不被引号包围的元素的 HTML 标签,例如:
<div id=1></div>
而不是
<div id="1"></div>
当然在浏览器中这是可行的……但是 Thymeleaf 不允许这样做并且不提供页面。有什么办法可以允许更宽松的规则吗?我搜索了 Thymeleaf 的文档和 Spring Boot 参考,但没有找到答案。
只是为了澄清 - 我什至没有为 Thyemeleaf 配置我自己的 bean,只是通过 maven 将它作为 spring-boot-starter 之一添加到类路径中。所以现在这些是默认设置。
【问题讨论】:
【参考方案1】:我知道我在很长一段时间后给出了答案,但如果它对任何人都有帮助,那就分享一下。 我在将一个属性 “spring,thymeleaf.mode”设置为“LEGACYHTML5”后解决了这个问题。
spring.thymeleaf.mode=LEGACYHTML5
并在 pom.xml 中添加依赖:
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
<version>1.9.21</version>
</dependency>
如果你想禁用 thymeleaf 的缓存,那么 thymeleaf 缓存
spring.thymeleaf.cache=false
【讨论】:
【参考方案2】:Spring Boot 1.5.3 supportsThymeleaf 3。Thymeleaf 3 有 full html5 markup support.
将以下行添加到您的pom.xml
以覆盖 Spring boot 中的 Thymeleaf 版本,您将能够使用未关闭的标签。
<properties>
<thymeleaf.version>3.0.6.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.2.1</thymeleaf-layout-dialect.version>
...
</properties>
【讨论】:
我认为最好的答案。注意粘贴在答案中的代码应该添加到正如@mussdroid 所说,一切都需要使用有效的 XML。以下是 Thymeleaf 文档的一部分,解释了这方面的背景:http://www.thymeleaf.org/doc/articles/fromhtmltohtmlviahtml.html
另外,如果这是一个问题,我相信您可以打开 legacy-mode 以允许非 XML 模板,但如果可能的话,我更喜欢使用有效的 XML: http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#what-kind-of-templates-can-thymeleaf-process
我自己不知道如何更改模式,但我确信 DuckDuckGo 或此站点上的某个人会。
【讨论】:
在您提供的链接中,我可能正在寻找旧版 HTML。但是当我选择该选项时,我的 Angularjs 代码将停止工作......有什么想法吗? 是的,根据第二个链接,Thymeleaf 会在处理并输出之前修改您的 HTML 以使其成为有效的 XML。不确定,但我绝对可以想象这会把 Angular 搞砸。您可能能够以某种方式构建您的东西以使其工作,但如果不是太多工作,我可能只会让所有内容成为有效的 XML。 实际上没有错误 - 角度表达式、绑定等不起作用。我所做的是使用在线工具将html转换为xhtml。由于这些事情,我可能不得不放弃 Thymeleaf。不过,你确实回答了我的问题,所以我选择了你的答案:)。 k,谢谢。祝你好运!是不是全部都不起作用,还是其中一部分不起作用? 显然是所有这些。就好像我没有在 DOM 中包含 ng-app 元素一样。【参考方案4】:一切都应该是 xthml 格式
例如;
HTML 链接
<link rel="stylesheet" type="text/css" href="mystyle.css">
THYMELEAF LINK 应该以“/>”结尾
<link rel="stylesheet" href="print.css" media="print" type="text/css" />
HTML 元数据
<meta charset="UTF-8">
THYMELEAF META 应该以“/>”结尾
<meta charset="utf-8"/>
样本
<input type="text" name="lastname" disabled /> wrong
<input type="text" name="lastname" disabled="disabled" /> correct
否则页面将不会显示,因为应用了 xhmtl 规则。
请看链接,避免此类错误 HTML and XHTML
另一方面,当页面返回浏览器时,您会看到 xhtml 规则再次转换为 html 格式。但是它在发送客户端 thymeleaf xhtml 规则之前在服务器上运行的实际页面被应用。
【讨论】:
以上是关于Spring Boot 和 Thymeleaf - 删除严格的 HTML 错误检查的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot(十五):spring boot+jpa+thymeleaf增删改查示例
Spring Boot 中的 Thymeleaf 缓存和安全性
thymeleaf 和 spring-boot 丢失的复杂对象
Thymeleaf 模板 在spring boot 中的引用和应用
用于 Spring Boot + Thymeleaf 的 @WebAppConfiguration 和 @ContextConfiguration