可以在freemarker中使用配对标签而不是非配对标签吗?与< #else />中一样而不只是<#else>?

时间:2017-08-16 09:29:57

标签: freemarker

这对我来说的主要原因是能够通过html编辑器(如记事本++中的插件)打印我的freemarker代码。当我只使用<#else>时,缩进是错误的。当我使用< #else />时,没关系。它似乎到目前为止工作,但我不确定我是不是做了一些可怕的错误。

1 个答案:

答案 0 :(得分:1)

大多数核心指令都支持

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

编辑器中的缩进,编辑器应该知道哪些指令支持嵌套内容。就像指令名是&#34; include&#34;一样,它知道在该标签之后不需要缩进。 #assign / #local / #global有点棘手,因为它们有两种形式:<#assign x = ...><#assign x>...</#assign>。此外,有时会添加新指令的问题,因此编辑器仍然无法识别它们。幸运的是,这很少发生,所以这不是一个不可能的情况。