Freemarker - 检查列表是否只包含空字符串

Freemarker - Check if list contains only empty Strings

我有一个列表,可能只有空字符串。

我的目标是创建一个 if 原因,我可以在其中识别列表是否仅包含空字符串。

当我尝试时:

    if list?size gt 0, 

我总是进入 if 循环,因为列表不为空,它包含空字符串。

举个例子:

所有字符串都可以为空 ("")。

    <#assign list = [string1, string2, string3, string4, string5]>

    <#if list contains not only empty strings >

    do some things 

    </#if>

输出应该是:只进入 if 循环,当列表不仅包含空字符串时。

有人知道这是怎么回事吗? (无需遍历整个列表并检查每个字符串)

你必须使用 ?has_content 检查这个 document

<#assign list1 = ["", " ", "s"]>

    <#list list1 as list>
    <#if list?has_content >
            ${list}

    </#if>

    </#list>

输出将是:s

但是,您必须遍历整个列表,至少从 FreeMarker 2.3.28 开始是这样。为它写一个函数:

<#function containsNonEmpty ls>
  <#list ls as i>
    <#if i != ''>
      <#return true>
    </#if>
  </#list>
  <#return false>
</#function>

也许您真正想要的是删除空元素,即使并非所有元素都是空的。然后检查列表是否为空。在 2.3.29 中,您将能够使用 myList?filter(s -> s != '')