Freemarker 在宏之后删除换行符

Freemarker removing newlines after macro

我希望 Freemarker 在调用我的宏后保留换行符。

我搞砸了关闭标签 <@test></@test> 没有任何区别。我也尝试在指令中使用 body 但那是空的。

也许我可以访问标签后的模板内容,如果那是一个换行符,那么我可以打印它。不过好像有点乱。

我的模板包含:

<@test/> <@test/>

<@test/>

<@test/>

这是印刷品:

test test

test
test

但我想打印:

test test

test

test

我是这样定义指令的:

public class TestMacro implements TemplateDirectiveModel {

    @Override
    public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body)
            throws TemplateException, IOException {

        env.getOut().append("test");

    }
}

这是我将其添加到配置中的方式:

Configuration config = configurer.createConfiguration();
config.setSharedVariable("test", new TestMacro());

这就是白色 space 条纹的工作原理(这已记录在案)。您可以在 Configuration 中完全关闭 if ,尽管这样您最终会在 #if-s 等周围出现很多不需要的白色-space,或者您可以添加 <#nt>-s 在那些标​​签之后。

如果您只想在特定模板中包含所有空格,您可以添加 <#ftl strip_whitespace=false/>

否则,如果你想在所有模板中实现这一点,你可以在 config

上设置 属性
config.setWhitespaceStripping(false); 

如果你想压缩模板中的一些空白,你可以使用 <#compress>...</#compress> 指令。