freemarkers跳过assertNonNull InvalidReferenceExcepti

2019-07-30 12:47发布

我渲染freemarker的对象列表:

<ul>
    <#list publication as item>
        <li><b>${item.key}</b> : ${item.value}</li>
    </#list>
</ul>

但一些项目有item.value空是引发异常:

freemarker.core.InvalidReferenceException: Expression item.value is undefined on line 12, column 44 in mailTemplate.
    at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:125)
    at freemarker.core.Expression.getStringValue(Expression.java:118)

我想在FreeMarker呈现“空”或没有,并保持发送邮件而不是阻塞上的

我总是可以先发送它的FreeMarker前检查清单,但如果我能避免这一步会更好

Answer 1:

您应该检查在模板中,如果缺少值,然后打印一些有意义的收件人(“零”肯定对他们来说没有意义)。 象,N / A,如果该项目不需要值:

<li><b>${item.key}</b> : ${item.value!'N/A'}</li>

或者跳过整行,如果缺少值,因为记录仍然是不完整:

<#if item.value??>
  <li><b>${item.key}</b> : ${item.value}</li>
</#if>


文章来源: freemarkers skip assertNonNull InvalidReferenceException