【问题标题】:Freemarker removing newlines after macroFreemarker 在宏之后删除换行符
【发布时间】:2015-08-02 10:44:49
【问题描述】:

我希望 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());

【问题讨论】:

    标签: macros whitespace freemarker


    【解决方案1】:

    这就是空白条带的工作原理(这已记录在案)。如果在Configuration 中完全关闭,您可以关闭,但最终会在#if-s 等周围出现很多不需要的空白,或者您可以在这些标签之后添加&lt;#nt&gt;-s。

    【讨论】:

    • 感谢您指向正确方向的指针,但这并不能完全回答问题。
    • 我正在寻找有关如何在配置上进行设置的更多详细信息。我发现示例在回答问题时总是很有帮助的。
    • 这取决于你如何配置FreeMarker,这通常取决于你使用的框架。通常类似于 Java 中的 configuration.setWhitespaceStripping(false);.properties 文件中的 whitespace_stripping=false 等。
    【解决方案2】:

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

    否则如果你想在所有模板中实现这一点,你可以在配置中设置属性

    config.setWhitespaceStripping(false); 
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多