freemarkers пропускают assertNonNull InvalidReferenceException

Я отображаю список объектов с помощью 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 отображал «null» или ничего и продолжал отправлять почту вместо блокировки на этом

Я всегда могу сначала проверить список, прежде чем отправить его на freemarker, но если я смогу избежать этого шага, будет лучше


person Community    schedule 20.07.2012    source источник


Ответы (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>
person ddekany    schedule 20.07.2012
comment
Это также допустимый вариант для работы с нулевыми значениями: ${item.value!} - person Rick; 25.07.2012
comment
Конечно, это то же самое, что и ${item.value!''}, поэтому, если вы все равно будете использовать '' по умолчанию, все в порядке. - person ddekany; 05.03.2013