Thymleaf 3,attoparser,CDATA和HTML模板与脚本标签



我在Spring Boot 1.3.5中挣扎,它依赖于旧的Thymeleaf 2.x系列,试图在标签内传递HTML模板script

<script type="text/template" id="catTmpl">
<![CDATA[
<b><%=name%></b>
]]>
</script>

导致错误:

org.xml.sax.SAXParseException: The content of elements must consist of well-formed character data or markup.

经过一些操作,它被正确传递但使用 CDATA 包装渲染,这破坏了 JS 模板(在我的情况下undescore.js(:

_.template($("#catTmpl").html())

我看到一些博客,发现Thymleaf 3使用不同的解析器。检查:

$ gradle dependencies
|    |    +--- org.thymeleaf:thymeleaf:3.0.6.RELEASE
|    |    |    +--- org.attoparser:attoparser:2.0.4.RELEASE

该解析器假定script包含 CDATA,并且上面的代码在没有 CDATA 的情况下工作正常。

什么是attoparser

Thymeleaf 3 是否准备好通过script(或 HTML 5template(标签传递 HTML 模板,而不会胡说八道?

attoparserhttp://www.attoparser.org/从项目主页:

  • 易于使用。需要几行代码。再也不用担心 JDK 的解析器 API 版本了。
  • 要快。与最快的标准解析器一样快。在许多情况下,速度更快。
  • 提供强大的界面。考虑格式良好可选、行 + 列位置、重建原始文档的能力等。
  • 简化您的解析体验。通过消除对验证或实体解析的担忧 - 在许多情况下两者都不需要。

正如邮件列表中所写attoparser旨在与Thymeleaf合作。

它能够解析 HTML(因此无需关闭<p>(,但正如这篇博文解析器所说,解析器接受无效的 HTML 5<div/>。百里香叶 2 也接受这一点,但产生了有效的<div></div>,百里香叶 3 不接受。小心!

根据错误修改方式被认为是 CDATA #9attoparserscript正文解释为 CDATA,仅用于:

默认情况下,不应将所有这些替代项视为 CDATA(除非它们明确包含在 CDATA 部分中(,因此最好仅在以下有关类型的情况下考虑 CDATA 的内容:

  • 无类型
  • 类型是以下之一: JavaScript, ECMASCRIPT, text/JavaScript, text/ecmascript, application/javascript, application/ecmascript

最新更新