使用Freemarker打印列表时处理空值?

时间:2016-09-23 08:42:58

标签: freemarker

我正在尝试从Iterable<Object>个实例的集合中构建HTML表。

final Iterable<Iterable<Object>> rows = Lists.newArrayList(
    Lists.newArrayList( 1, "Fizz"),
    Lists.newArrayList( 2, "Buzz"),
    Lists.newArrayList( 3, null ));

这是使用&#34;行&#34;。

的键添加到我的模型中

在我的模板文件中,我有以下标记:

<#list rows as row>
  <tr>
    <#list row as value>
      <td>${value!}</td>
    </#list>
  </tr>
</#list>

当我尝试打印出这些值时,模板会处理最后一行的null值:

  

freemarker.core._TemplateModelException:FreeMarker值存在,但内部没有任何内容; TemplateModel对象(类:freemarker.ext.beans.StringModel)返回null而不是String。这可能是构建数据模型的非FreeMarker代码中的错误。

The blamed expression:
==> value!

我已尝试将${value!}替换为${value?has_content}并在块周围尝试了一些其他组合<#if value??>,但我仍然遇到同样的错误。

如何让我的Freemarker模板接受这些null值并生成一个空字符串?

3 个答案:

答案 0 :(得分:0)

您的value对象很可能以toString()方法的形式返回null。

答案 1 :(得分:0)

这应该有效:

${value!""}

答案 2 :(得分:-1)

  

你可以用??测试操作员:

     

检查对象的属性是否为null:

     

&lt; #if object.attribute ??&gt;

     

检查对象或属性是否为空:

     

&lt; #if(object.attribute)??&gt;

     

来源:FreeMarker手册

看这里是答案: Handling null values in Freemarker