在 freemarker 中使用成对标签而不是非成对标签可以吗?就像在 <#else /> 而不是 <#else> 中一样?

Is it ok to use pair tags instead of non-pair tags in in freemarker? As in <#else /> instead of just <#else>?

对我来说这样做的主要原因是能够通过 html 编辑器(就像记事本++中的插件)漂亮地打印我的 freemarker 代码。当我只使用 <#else> 时,缩进是错误的。当我使用 <#else /> 时,没问题。到目前为止它似乎有效,但我不确定我是否做错了什么。

大多数核心指令都支持

<#... />,包括 #else。 (不支持的是那些你不应该在没有嵌套内容的情况下使用的内容,比如 #list#if。)但是,允许 <#else /><#elseif ... />实际上是一个遗留错误。它们的工作方式与没有 / 时相同,并且为了向后兼容,FreeMarker 2.x 中不会修复此错误,因此无需担心。但它们原则上是不正确的,因为 #else#elseif 在它们下面有它们的嵌套内容(自己的块),所以它们实际上并没有在标签之后立即关闭。相反,它们由下一个 <#else ...>/<#elseif ...></#if> 隐式关闭。所以 <#else /> 是可以容忍的,但不是一个很好的风格。

从编辑器的缩进来看,编辑器应该知道哪些指令是否支持嵌套内容。就像如果指令名称是 "include",那么它知道在该标记之后不需要缩进。 #assign/#local/#global 有点棘手,因为它们有两种形式:<#assign x = ...><#assign x>...</#assign>。此外,有时会添加新指令,因此编辑器还无法识别它们。幸运的是,这种情况很少发生,所以这不是不可能的情况。