【发布时间】:2017-02-01 01:23:31
【问题描述】:
我正在尝试从Iterable<Object> 实例的集合构建一个 HTML 表格。
final Iterable<Iterable<Object>> rows = Lists.newArrayList(
Lists.newArrayList( 1, "Fizz"),
Lists.newArrayList( 2, "Buzz"),
Lists.newArrayList( 3, null ));
这是使用“rows”键添加到我的模型中的。
在我的模板文件中,我有以下标记:
<#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 值并生成一个空字符串?
【问题讨论】:
-
正如错误消息所暗示的,必须弄清楚那些带有
null的StringModel-s 是从哪里来的。模板语言无法处理这种情况,因为它应该发生。
标签: freemarker