Как проверить, существует ли переменная в шаблоне FreeMarker?
У меня есть шаблон Freemarker, который содержит кучу заполнителей, для которых предоставляются значения при обработке шаблона. Я хочу условно включить часть шаблона, если указана переменная userName, что-то вроде:
[#if_exists userName]
Hi ${userName}, How are you?
[/#if_exists]
Тем не менее, руководство FreeMarker, по-видимому, указывает, что if_exists устарело, но я не могу найти другого способа добиться этого. Конечно, я мог бы просто предоставить дополнительную логическую переменную isUserName и использовать ее следующим образом:
[#if isUserName]
Hi ${userName}, How are you?
[/#if]
Но если есть способ проверить, существует ли userName, тогда я могу избежать добавления этой дополнительной переменной.
5 ответов
Чтобы проверить, существует ли значение:
[#if userName??]
Hi ${userName}, How are you?
[/#if]
Или со стандартным синтаксисом freemarker:
<#if userName??>
Hi ${userName}, How are you?
</#if>
Чтобы проверить, существует ли значение и не является ли оно пустым:
<#if userName?has_content>
Hi ${userName}, How are you?
</#if>
Этот, кажется, лучше подходит:
<#if userName?has_content>
... do something
</#if>
http://freemarker.sourceforge.net/docs/ref_builtins_expert.html
Также я думаю, что if_exists был использован как:
Hi ${userName?if_exists}, How are you?
который не сломается, если userName имеет значение null, результат, если null будет:
Hi , How are you?
if_exists теперь устарела и была заменена оператором по умолчанию! как в
Hi ${userName!}, How are you?
Оператор по умолчанию также поддерживает значение по умолчанию, например:
Hi ${userName!"John Doe"}, How are you?
Я думаю, что многие люди хотят иметь возможность проверить, не является ли их переменная пустой и существует ли она. Я думаю, что проверка на существование и пустоту является хорошей идеей во многих случаях и делает ваш шаблон более надежным и менее подверженным глупым ошибкам. Другими словами, если вы проверяете, чтобы убедиться, что ваша переменная не пуста и не пуста перед ее использованием, тогда ваш шаблон станет более гибким, потому что вы можете добавить в него либо пустую переменную, либо пустую строку, и она будет работать так же в любом случае.
<#if p?? && p?has_content>1</#if>
Допустим, вы хотите убедиться, что p
это больше, чем просто пробел. Затем вы можете обрезать его, прежде чем проверять, has_content
,
<#if p?? && p?trim?has_content>1</#if>
ОБНОВИТЬ
Пожалуйста, игнорируйте мое предложение - has_content
это все, что нужно, так как он выполняет нулевую проверку вместе с пустой проверкой. дела p?? && p?has_content
эквивалентно p?has_content
так что вы можете просто использовать has_content
,
Для версий, предшествующих FreeMarker 2.3.7
Вы не можете использовать ??
для обработки пропущенных значений используется старый синтаксис:
<#if userName?exists>
Hi ${userName}, How are you?
</#if>