我在 Thymeleaf 中使用 Spring Boot 3.0.4。在最新的 Thymeleaf 文档中5.5 固定值布尔属性 它说:
HTML 有布尔属性 的概念,没有值的属性和一个的存在意味着值是“真”。在 XHTML 中,这些属性只取 1 个值,即它本身。 …
标准方言包含允许您通过评估条件来设置这些属性的属性,因此如果评估为真,属性将设置为其固定值,如果评估为假,则不会设置属性......
标准方言中存在以下固定值布尔属性:……
……th:controls
我有 XHTML 源代码,其中包含一个
<audio>
元素:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" lang="en-US">
…
<audio th:if="${audioUrl}" th:src="${audioUrl}" controls="controls">
This browser does not support audio.
</audio>
…
请注意,我为布尔属性使用 XHTML 格式
controls="controls"
。我希望元素呈现为 HTML:
<audio … controls>
This browser does not support audio.
</audio>
而是将其呈现为具有值的属性:
<audio … controls="controls">
This browser does not support audio.
</audio>
如果我这样做:
…
<audio th:if="${audioUrl}" th:src="${audioUrl}" th:controls="${true}">
This browser does not support audio.
</audio>
…
然后 Thymeleaf 仍然渲染:
<audio … controls="controls">
This browser does not support audio.
</audio>
因为 Thymeleaf 正在将
true
转换为 controls="controls"
,看起来 Thymeleaf 正在以 XHTML 模式生成输出。但即使我在我的 spring.thymeleaf.mode: HTML
文件中明确设置 application.yaml
(我认为这是默认设置),Thymeleaf 仍然将 th:controls="${true}"
呈现为 controls="controls"
。 (请注意,我有 spring.thymeleaf.suffix: .xhtml
因为我的输入文件是 XHTML,但我认为这应该没有影响。)
如果我使用
controls
形式,Thymeleaf 似乎应该已经生成了 controls="controls"
而不是 th:controls
。我打开了Issue #956,但我在这里问我是否在某处犯了错误。