Ответ 1
[#if userName??]
Hi ${userName}, How are you?
[/#if]
Или со стандартным синтаксисом freemarker:
<#if userName??>
Hi ${userName}, How are you?
</#if>
У меня есть шаблон Freemarker, который содержит кучу заполнителей, значения которых предоставляются при обработке шаблона. Я хочу условно включить часть шаблона, если указана переменная userName, например:
[#if_exists userName]
Hi ${userName}, How are you?
[/#if_exists]
Однако руководство FreeMarker указывает, что if_exists устарел, но я не могу найти другого способа добиться этого. Конечно, я мог бы просто предоставить дополнительную логическую переменную isUserName и использовать ее вот так:
[#if isUserName]
Hi ${userName}, How are you?
[/#if]
Но если есть способ проверить, существует ли имя пользователя, я могу избежать добавления этой дополнительной переменной.
[#if userName??]
Hi ${userName}, How are you?
[/#if]
Или со стандартным синтаксисом freemarker:
<#if userName??>
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>
UPDATE
Пожалуйста, проигнорируйте мое предложение - has_content
- это все, что необходимо, так как оно выполняет нулевую проверку вместе с пустой проверкой. Выполнение p?? && p?has_content
эквивалентно p?has_content
, поэтому вы можете просто использовать has_content
.