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

时间:2017-07-12 08:33:08

标签: html5 templates thymeleaf

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

<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 5 template)标记传递HTML模板而不使用CDATA废话?

1 个答案:

答案 0 :(得分:0)

attoparserhttp://www.attoparser.org/来自项目主页:

  • 易于使用。几行代码需要。并且没有更多的解析器库会让您担心JDK的解析器API版本。
  • 要快。和最快的标准解析器一样快。在许多情况下,更快。
  • 提供强大的界面。考虑格式良好的可选性,行+列位置,重建原始文档的能力等。
  • 简化您的解析体验。通过消除担心验证或实体解析的需要 - 在许多情况下都不需要。

正如邮件列表attoparser所述,旨在与Thymeleaf合作。

它能够解析HTML(因此无需关闭<p>),但as say this blog post解析器接受<div/>这是无效的HTML 5.Thymeleaf 2也接受此但生成有效{ {1}},Thymeleaf 3不要。小心!

根据bug Modify the way is considered CDATA #9 <div></div>仅将attoparser正文解释为CDATA:

  

默认情况下,所有这些替代方案都不应被视为CDATA(除非它们明确地包含在CDATA部分中),因此在以下情况下仅考虑CDATA的内容应该是一个好主意:

     
      
  • 没有类型
  •   
  • type是以下之一:javascript,ecmascript,text / javascript,text / ecmascript,application / javascript,application / ecmascript
  •