如何在freemarker中检查空列表

Kra*_*ken 35 java null freemarker

说我的java代码有List<String> listS =null,我把它传递给我的模板文件.

现在我想确保这一点if list has some data then only do something.

我试过了

<#if listS = null>
AND
<#if !listS>
AND
<#if listS?size=0>
Run Code Online (Sandbox Code Playgroud)

但这些似乎都没有奏效.我的java代码有一些逻辑; 通过它,如果某些条件为真,那么我new这就listS填充它.

因此,我需要知道是否listS已填充或仅在我的模板文件中为空.

我该怎么做呢?谢谢.

编辑:此外,我有一个结构列表,每个包含这个列表,(填充或不是一个不同的问题),我传递整个结构列表,因此传递一个布尔值与模板文件以及我的列表结构是不可能的,因为我将不得不在每个列表中遍历,并且我想在模板文件本身中进行遍历.

编辑2:对于那些知道什么是Java null的人,FreeMarker 2.3.x将它们视为缺失值.简单地说,模板语言不知道null的概念.例如,如果你有一个具有maidenName属性的bean,并且该属性的值为null,那么就模板而言,就像没有这样的属性一样(假设你没有)配置FreeMarker使用一些极端的对象包装器,即).返回null的方法调用的结果也被视为缺失变量(同样,假设您使用了一些常用的对象包装器).请参阅常见问题解答.

Freemarker手册

但是我仍然没有得到如何让它工作的答案,如果可以的话.

Boh*_*ian 59

使用has_content内置:

<#if list5?has_content>
Run Code Online (Sandbox Code Playgroud)

  • 你必须记住,当你使用`has_content`时 - 你实际上并不知道列表存在(是空)还是空(size = 0).在这两种情况下,它都将返回false. (3认同)

小智 9

<#list myList![] as element>
   <#--  do something per element -->
</#list>
Run Code Online (Sandbox Code Playgroud)

如果列表为 null 或为空,则结果将为空。


Tar*_*rek 7

您还可以使用缺失值测试运算符,如下所示:

<#if listS??>
    <#list listS.stuff as stuff>
        ${stuff.value}
    </#list>
</#if>
Run Code Online (Sandbox Code Playgroud)