【问题标题】:Spring Boot & Thymeleaf - remove strict HTML error checkingSpring Boot 和 Thymeleaf - 删除严格的 HTML 错误检查
【发布时间】: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 之一添加到类路径中。所以现在这些是默认设置。

【问题讨论】:

    标签: java html spring spring-mvc thymeleaf


    【解决方案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>
      

      【讨论】:

      • 我认为最好的答案。注意粘贴在答案中的代码应该添加到 .
      【解决方案3】:

      正如@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 规则之前在服务器上运行的实际页面被应用。

      【讨论】:

        猜你喜欢
        • 2017-01-14
        • 1970-01-01
        • 2018-04-16
        • 2021-12-25
        • 2017-08-29
        • 2019-10-29
        • 2021-11-17
        • 2016-11-05
        • 2019-04-29
        相关资源
        最近更新 更多