我在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废话?
答案 0 :(得分:0)
attoparser
是http://www.attoparser.org/来自项目主页:
正如邮件列表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