2014-05-08 10 views
40

Was ist der Unterschied zwischen den folgenden in Freimarker?Unterschied zwischen ?? , has_content, if_exists in freemarker

! 
has_content 
?? 
if_exists 

Ich habe ?? statt has_content & führte es zu so großen Problemen. Verschraubt meinen Tag. Ich muss dieses Ding wirklich klären.

Als ich noch

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

Als ich

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

Does nicht ?? OR has_content OR if_exists für die gleiche Sache überprüfen?

+1

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

Antwort

86

?? sagt, wenn der linke Wert Hand Operand fehlt (bedeutet, es ist Java null oder Sie haben eine undefinierte Variable gibt), und gibt zurück false (fehlt) oder true (nicht fehlen) entsprechend.

?has_content ist sehr ähnlich wie ??, außer dass es auch false für eine leere Zeichenfolge oder eine leere Liste oder eine leere Karte zurückgibt. (Es gibt nicht false für ein 0, boolean false, etc.)

! verwendet wird, einen Standardwert zu geben, wenn ein Wert fehlt, wie color!"no color". Wenn Sie den Operanden der rechten Hand von ! weglassen, ist der Standardwert eine leere Zeichenfolge und eine leere Sequenz und ein leerer Hash zur selben Zeit.

?if_exists ist die alte Art zu schreiben ??. Benutze es nicht.

+13

"gut dokumentiert" Aussage verdient einige Links :) [has_content] (http://freemarker.org/docs/ref_builtins_expert.html#ref_builtin_has_content) , [Standardwertoperator!] (http://freemarker.org/docs/dgui_template_exp.html#dgui_template_exp_missing_default), [fehlender Werttest ??] (http://freemarker.org/docs/dgui_template_exp.html#dgui_template_exp_missing_test), und [im alten Stil if_exists] (http://freemarker.org/docs/dgui_template_exp.html#dgui_template_exp_missing) – coolersport

+1

'? has_content' alwarys nützlich, außer Wert ist' Boolean' oder'Anzahl 1/0 für ja/no' – soytian

+0

wenn dieser Käufer nicht dort in '<#elseif buyer.company?has_content>' gibt es exception undefined, wie man prüft, ob Käufer existst ich versuchte alles oben! – shareef