我正在使用Freemarker模板生成一个odt文件。
我的代码是:
${(addressline1)!}
${(addressline2)!}
${(addressline3)!}
问题是当addresline1或addressline2为空时,它会生成一个空行。如果所有字段都为空,则会生成三个空行。
我尝试了以下事项:
[#if addressline2??]${(addressline2)!} [/#if]
[#if addressline2?has_content]${(addressline2)!} [/#if]
压缩指令
[@compress]
${(addressline1)!}
${(addressline2)!}
${(addressline3)!} [/@compress]
但似乎没有任何效果。
答案 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>
我不喜欢它,因为它为模板添加了多余的部分。