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.
5 answers
[#if userName??]
Hi ${userName}, How are you?
[/#if]
Lub ze standardową składnią freemarker:
<#if userName??>
Hi ${userName}, How are you?
</#if>
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
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?
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
.
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>
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