Jak sprawdzić, czy zmienna istnieje w szablonie FreeMarker?

Mam szablon Freemarker, który zawiera kilka elementów zastępczych, dla których wartości są dostarczane podczas przetwarzania szablonu. Chcę warunkowo dołączyć część szablonu, jeśli podana jest zmienna userName, coś w stylu:

[#if_exists userName]
  Hi ${userName}, How are you?
[/#if_exists]

Jednak instrukcja FreeMarker wydaje się wskazywać, że if_exists jest przestarzały, ale nie mogę znaleźć innego sposobu, aby to osiągnąć. Oczywiście mógłbym po prostu podać dodatkową zmienną boolean isUserName i użyć tego jak to:

[#if isUserName]
  Hi ${userName}, How are you?
[/#if]

Ale jeśli istnieje sposób sprawdzenia, czy nazwa użytkownika istnieje, mogę uniknąć dodawania tej dodatkowej zmiennej.

Author: Dónal, 2008-11-20

5 answers

[#if userName??]
   Hi ${userName}, How are you?
[/#if]

Lub ze standardową składnią freemarker:

<#if userName??>
   Hi ${userName}, How are you?
</#if>
 243
Author: Ulf Lindback,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-18 07:54:32

To chyba lepiej pasuje:

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

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

 87
Author: user1546081,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-23 14:15:59

Również myślę, że if_exists zostało użyte Tak:

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

Które nie pęknie, jeśli nazwa użytkownika jest null, wynik jeśli null będzie:

Hi , How are you?

If_exists jest teraz przestarzały i został zastąpiony domyślnym operatorem ! jak w

Hi ${userName!}, How are you?

Operator domyślny obsługuje również wartość domyślną, taką jak:

Hi ${userName!"John Doe"}, How are you?
 59
Author: Ulf Lindback,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-27 10:23:39

Myślę, że wiele osób chce być w stanie sprawdzić, czy ich zmienna nie jest pusta, jak również czy istnieje. Myślę, że sprawdzanie istnienia i pustki jest dobrym pomysłem w wielu przypadkach i sprawia, że szablon jest bardziej wytrzymały i mniej podatny na głupie błędy. Innymi słowy, jeśli sprawdzisz, czy Twoja zmienna nie jest null i nie jest pusta przed jej użyciem, Twój szablon stanie się bardziej elastyczny, ponieważ możesz do niej wrzucić zmienną null lub pusty łańcuch i w obu przypadkach będzie działać tak samo.

<#if p?? && p?has_content>1</#if>

Załóżmy, że chcesz mieć pewność, że p jest czymś więcej niż tylko białymi spacjami. Następnie możesz go przyciąć przed sprawdzeniem, czy to has_content.

<#if p?? && p?trim?has_content>1</#if>

UPDATE

Proszę zignorować moją sugestię --has_content to wszystko, co jest potrzebne, ponieważ sprawdza null wraz z pustym czekiem. Robienie {[5] } jest równoważne p?has_content, więc równie dobrze możesz użyć has_content.

 2
Author: Jake Toronto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-13 19:29:01

Dla wersji poprzednich do FreeMarker 2.3.7

Nie możesz używać ?? do obsługi brakujących wartości, stara składnia to:

<#if userName?exists>
   Hi ${userName}, How are you?
</#if>
 1
Author: Petter Friberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-06 11:08:12