Как проверить, существует ли переменная в шаблоне 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]
но если есть способ проверить, существует ли имя пользователя, то я могу избежать добавления этой дополнительной переменной.
5 ответов:
[#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?
который не сломается, если имя пользователя равно 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
- Это все, что необходимо, так как он выполняет проверку на null с пустой чек. Делатьp?? && p?has_content
эквивалентноp?has_content
, так что вы можете также просто использоватьhas_content
.