2014-05-08 8 views
40

Jaka jest różnica między następującymi w freemarker?Różnica między? , has_content, if_exists in freemarker

! 
has_content 
?? 
if_exists 

Użyłem? zamiast has_content & prowadzi to do tak wielkich problemów. Przykleiłem mój dzień. Naprawdę muszę to wyjaśnić.

Kiedy użyłem

!(xyz.abc!)?? -- it dint work 

Kiedy użyłem

!(xyz.abc!)?has_content ... it did work 

Czy nie ?? OR has_content OR if_exists sprawdza to samo?

+1

see doc http://freemarker.org/docs/dgui_template_exp.html –

Odpowiedz

86

?? opowiada jeśli wartość ręki operand Left brakuje (oznacza to Java null lub masz niezdefiniowanej zmiennej tam), i daje z powrotem false (brak) lub true (nie brakuje), odpowiednio.

?has_content jest bardzo podobny do ??, oprócz tego zwraca również false dla pustego łańcucha lub pustej listy lub pustej mapy. (To nie zwraca false dla 0, logiczna false itp)

! jest używany w celu uzyskania wartości domyślnej, gdy wartość wynosi brakuje, jak color!"no color". Jeśli pominięto prawy operand z !, to domyślną wartością jest pusty ciąg znaków i pusta sekwencja oraz pusty skrót w tym samym czasie.

?if_exists to stary sposób pisania ??. Nie używaj go.

+13

"dobrze udokumentowane" stwierdzenie zasługuje kilka linków :) [has_content] (http://freemarker.org/docs/ref_builtins_expert.html#ref_builtin_has_content) , [operator wartości domyślnej!] (http://freemarker.org/docs/dgui_template_exp.html#dgui_template_exp_missing_default), [test wartości brakującej ??] (http://freemarker.org/docs/dgui_template_exp.html#dgui_template_exp_missing_test), i [stary styl if_exists] (http://freemarker.org/docs/dgui_template_exp.html#dgui_template_exp_missing) – coolersport

+1

'? has_content' jest alwarys użyteczne, z wyjątkiem wartości' Boolean' lub 'Number 1/0 for yes/no' – soytian

+0

jeśli ten kupujący nie znajduje się w '<#elseif buyer.company?has_content>' daje nieokreślony wyjątek, jak sprawdzić, czy kupujący istnieje, i wypróbowałem wszystko powyżej! – shareef