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 != '')
。
我有一个列表,可能只有空字符串。
我的目标是创建一个 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 != '')
。