У меня есть шаблон 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, я могу избежать добавления этой дополнительной переменной.
java
templates
freemarker
Донал
источник
источник
Этот, кажется, лучше подходит:
http://freemarker.sourceforge.net/docs/ref_builtins_expert.html
источник
Также я думаю, что if_exists был использован как:
который не сломается, если userName имеет значение NULL, результат, если NULL будет:
if_exists устарел и заменен оператором по умолчанию! как в
Оператор по умолчанию также поддерживает значение по умолчанию, например:
источник
if
операторе по запросу.Я думаю, что многие люди хотят иметь возможность проверить, не является ли их переменная пустой и существует ли она. Я думаю, что проверка на существование и пустоту является хорошей идеей во многих случаях и делает ваш шаблон более надежным и менее подверженным глупым ошибкам. Другими словами, если вы проверяете, чтобы убедиться, что ваша переменная не пуста и не пуста перед ее использованием, тогда ваш шаблон станет более гибким, потому что вы можете добавить в него либо пустую переменную, либо пустую строку, и она будет работать так же в любом случае.
Допустим, вы хотите убедиться, что
p
это больше, чем просто пробел. Затем вы можете обрезать его перед проверкой, чтобы увидеть, если этоhas_content
.ОБНОВИТЬ
Пожалуйста, не обращайте внимания на мое предложение -
has_content
это все, что нужно, так как он выполняет нулевую проверку вместе с пустой проверкой. Делатьp?? && p?has_content
эквивалентноp?has_content
, так что вы можете просто использоватьhas_content
.источник
Вы не можете использовать
??
для обработки пропущенных значений, старый синтаксис:источник