Как проверить, существует ли переменная в шаблоне FreeMarker? - PullRequest
155 голосов
/ 20 ноября 2008

У меня есть шаблон 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 ]

266 голосов
/ 20 ноября 2008

Чтобы проверить, существует ли значение:

[#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>
90 голосов
/ 23 июля 2012

Этот, кажется, лучше подходит:

<#if userName?has_content>
... do something
</#if>

http://freemarker.sourceforge.net/docs/ref_builtins_expert.html

63 голосов
/ 20 ноября 2008

Также я думаю, что if_exists использовался как:

Hi ${userName?if_exists}, How are you?

, который не сломается, если userName равно нулю, результат, если null будет:

Hi , How are you?

if_exists устарел и заменен оператором по умолчанию! как в

Hi ${userName!}, How are you?

оператор по умолчанию также поддерживает значение по умолчанию, например:

Hi ${userName!"John Doe"}, How are you?
2 голосов
/ 06 апреля 2018

Для версий, предшествующих FreeMarker 2.3.7

Вы не можете использовать ?? для обработки пропущенных значений, старый синтаксис:

<#if userName?exists>
   Hi ${userName}, How are you?
</#if>
2 голосов
/ 12 мая 2014

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

<#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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...