Mam szablon Freemarker, który zawiera kilka symboli zastępczych, dla których wartości są dostarczane podczas przetwarzania szablonu. Chcę warunkowo dołączyć część szablonu, jeśli podano zmienną userName, na przykład:
[#if_exists userName]
Hi ${userName}, How are you?
[/#if_exists]
Jednak podręcznik FreeMarker wydaje się wskazywać, że if_exists jest przestarzałe, ale nie mogę znaleźć innego sposobu, aby to osiągnąć. Oczywiście mógłbym po prostu podać dodatkową zmienną logiczną isUserName i użyć jej w ten sposób:
[#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.
java
templates
freemarker
Dónal
źródło
źródło
Ten wydaje się lepiej pasować:
http://freemarker.sourceforge.net/docs/ref_builtins_expert.html
źródło
Myślę też, że if_exists zostało użyte tak:
która nie ulegnie zerwaniu, jeśli nazwa_użytkownika ma wartość null, wynikiem, jeśli null byłby:
if_exists jest teraz przestarzałe i zostało zastąpione operatorem domyślnym! jak w
operator domyślny obsługuje również wartości domyślne, takie jak:
źródło
if
oświadczeniu zgodnie z żądaniem op.Myślę, że wiele osób chce mieć możliwość sprawdzenia, czy ich zmienna nie jest pusta, a także czy istnieje. Myślę, że sprawdzanie istnienia i pustki jest dobrym pomysłem w wielu przypadkach i sprawia, że twój szablon jest bardziej niezawodny i mniej podatny na głupie błędy. Innymi słowy, jeśli upewnisz się, że zmienna nie ma wartości null ORAZ nie jest pusta przed jej użyciem, Twój szablon stanie się bardziej elastyczny, ponieważ możesz wrzucić do niego zmienną zerową lub pusty ciąg i będzie działać tak samo W obu przypadkach.
Powiedzmy, że chcesz się upewnić, że
p
to coś więcej niż tylko białe znaki. Następnie możesz go przyciąć przed sprawdzeniem, czy jesthas_content
.AKTUALIZACJA
Proszę zignorować moją sugestię -
has_content
to wszystko, co jest potrzebne, ponieważ wykonuje sprawdzenie zerowe wraz z pustym czekiem. Działaniep?? && p?has_content
jest równoważne zp?has_content
, więc równie dobrze możesz po prostu użyćhas_content
.źródło
Nie możesz użyć
??
do obsługi brakujących wartości, stara składnia to:źródło