2012-12-19 3 views
53

Как обращаться с null значениями в Freemarker? Я получаю некоторые исключения в шаблоне, когда в данных присутствуют значения null.Обработка нулевых значений в Freemarker

+0

Можно создать дубликат: http://stackoverflow.com/questions/306732/how-to-check-if-a-variable-exists-in-a-freemarker-template – cowls

ответ

65

Вы можете использовать ?? тест оператора:

Проверяется, если атрибут объекта не равно нулю:

<#if object.attribute??></#if>

Проверяется, если объект или атрибут не является нулевым:

<#if (object.attribute)??></#if>

Источник: FreeMarker Manual

+1

В чем разница между этим подходом и has_content ?? –

+2

'has_content', рядом с проверкой нуль, также проверяет, не пустое значение. Это работает для строк, последовательностей, хэшей или коллекций. Если объектом является дата, логическое или число, то оно действует как непустое. Для всех остальных типов он будет действовать как пустой. –

+0

У меня есть эта проблема, когда мне нужно проверить, является ли значение в bean-компоненте null.I пробовал следующее: $ {checknull (Bean.getValue())}, где checknull, если функция <#function checknull x> <#if x??> <#return ""> <#else> <#return x> но я получаю «Ошибка выполнения макроса: checknull требуется параметр: х не определен.» Ошибка –

1

Я думаю, что он работает по-другому

<#if object.attribute??> 
    Do whatever you want.... 
</#if> 

Если object.attribute является NOT NULL, то содержимое будет распечатана.

54

Начиная с FreeMarker 2.3.7, вы можете использовать this syntax:

${(object.attribute)!} 

или, если вы хотите отобразить текст по умолчанию, когда атрибут null:

${(object.attribute)!"default text"} 
+1

Для тех, кто использует Freemarker в качестве шаблона двигателя для XDocReport, это работает после добавления ' org.freemarker freemarker 2.3.22 'Вашему pom.xml. –

+0

Как вы это делаете, если у вас есть дата и дата может быть нулевой? Другими словами, object.dateAcquired, где dateAcquired может быть нулевым, и у вас есть $ {object.dateAcquired? Date} –

+1

@StephaneGrenier использовать '$ {(object.dateAcquired? Date)!" Not present "}' –

0

Использование ?? оператор в конце вашего заявления <#if>.

В этом примере показано, как обрабатывать значения null для двух списков в шаблоне Freemaker.

List of cars: 
<#if cars??> 
    <#list cars as car>${car.owner};</#list> 
</#if> 
List of motocycles: 
<#if motocycles??> 
    <#list motocycles as motocycle>${motocycle.owner};</#list> 
</#if> 
Смежные вопросы