删除Freemarker输出中的行

时间:2014-11-03 04:49:41

标签: freemarker

我正在使用Freemarker模板生成一个odt文件。

我的代码是:

${(addressline1)!}
${(addressline2)!}
${(addressline3)!}

问题是当addresline1或addressline2为空时,它会生成一个空行。如果所有字段都为空,则会生成三个空行。

我尝试了以下事项:

  1. [#if addressline2??]${(addressline2)!} [/#if]

  2. [#if addressline2?has_content]${(addressline2)!} [/#if]

  3. 压缩指令

    [@compress] 
    ${(addressline1)!}
    ${(addressline2)!}
    ${(addressline3)!} [/@compress]
    
  4. 但似乎没有任何效果。

3 个答案:

答案 0 :(得分:1)

您是否在OpenOffice / LibreOffice或此类可视编辑器中编辑模板?因为问题在于,虽然你只看到${something},但FreeMarker会看到<p>${something}</p>。由于它只是一个通用模板文本引擎,因此当插入的文本为空时,它不会删除保留在那里的<p></p>。将ODT用于它的应用程序应该提供一种清除空段落的方法。

答案 1 :(得分:0)

你应该能够通过这样做来实现它:

<#if addressline1 !== ''>${addressline1}</#if>

只需重复此过程即可检查所有3个变量。或者,如果它们不存在而不是它们只是为空,则此代码应该完成工作:

<#if addressline1?exists>${addressline1}</#if>

您可以在Freemarker手册网站上找到更多文档:http://freemarker.org/docs/index.html

答案 2 :(得分:0)

有同样的问题。这就是我最终的结果:

<#assign i2 = ""?left_pad(2*4)>
<#assign i3 = ""?left_pad(3*4)>
...
        <#if dep.version??>${i3}<version>${dep.version}</version>${"\n"}</#if><#t>
...

从我的错误报告中复制:

我希望能够通过1行模板源代码有条件地生成NEW LINE。

        <#if dep.classifier??><classifier>${dep.classifier}</classifier></#if>

无论如何,都会生成缩进空格和换行符。 {{#t}}和{{#rt}}和{{#lt}}在编译时适用,因此他们不关心条件。所以即使内容存在,它们也会被删除,这是我不想要的。

我可以这样做:

        <#if dep.classifier??>${"            "}<classifier>${dep.classifier}</classifier>${"\n"}</#if><#t>

这就是请求。它也可以是帮助我实现这一目标的任何东西。

在此之前,我必须这样做:

        <#if dep.classifier??>
        <classifier>${dep.classifier}</classifier>
        </#if>

我不喜欢它,因为它使模板更长。

或者

        <#if dep.classifier??><classifier>${dep.classifier}</classifier>
        </#if><#if dep.classifier??><classifier>${dep.classifier}</classifier>
        </#if>
        ...

我不喜欢,因为它很乱。

         <#if dep.classifier??>${"         "}<classifier>${dep.classifier}</classifier>${"\n"}</#if><#t>

我不喜欢它,因为它为模板添加了多余的部分。