【问题标题】:How to check for null List in freemarker如何在freemarker中检查空列表
【发布时间】:2012-09-15 22:17:18
【问题描述】:

假设我的 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>

但这些似乎都不起作用。我的java代码有一些逻辑;通过它,如果某些条件为真,那么我 new 这个 listS 并填充它。

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

我该怎么做?谢谢。

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

编辑 2:对于那些知道什么是 Java null 的人,FreeMarker 2.3.x 将它们视为缺失值。简单地说,模板语言不知道 null 的概念。例如,如果您有一个具有 maidenName 属性的 bean,并且该属性的值为 null,那么就模板而言,这与根本没有此类属性相同(假设您没有将 FreeMarker 配置为使用一些极端的对象包装器,即)。返回 null 的方法调用的结果也被视为缺失变量(再次假设您使用一些常用的对象包装器)。在常见问题解答中查看更多信息。

Freemarker Manual

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

【问题讨论】:

  • 我建议始终初始化列表并将您的逻辑基于列表的大小是否大于 0。尽管如果您想使用这种方式,那么我不会帮助,因为不幸的是我以前没有使用过 freemarker。

标签: java null freemarker


【解决方案1】:

使用has_content 内置:

<#if list5?has_content>

【讨论】:

  • 很抱歉在这里问,但无论如何,我可以实现以下吗?说我做&lt;#if somwething&gt;&lt;#assign newVar&gt;&lt;/#if&gt; 现在稍后我需要知道是否有一个变量为 newVar?
  • has_content 也可以在不存在的变量上工作(不会爆炸),因此您可以稍后在代码中执行newVar?has_content,如果newVar 从未被定义/已初始化。
  • 你必须记住,当你使用has_content - 你实际上并不知道列表是存在(为空)还是为空(大小= 0)。在这两种情况下,它都会返回 false。
【解决方案2】:

您也可以使用missing value test operator,例如:

<#if listS??>
    <#list listS.stuff as stuff>
        ${stuff.value}
    </#list>
</#if>

【讨论】:

    【解决方案3】:
    <#list myList![] as element>
       <#--  do something per element -->
    </#list>
    

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

    【讨论】:

    • 绝对是这个。有了这个,你可以避免额外的'if'语句。
    猜你喜欢
    • 2019-11-02
    • 2015-03-15
    • 2019-02-22
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    • 2019-03-20
    • 2014-12-01
    相关资源
    最近更新 更多