Was ist der Unterschied zwischen den folgenden in Freemarker?
!
has_content
??
if_exists
Ich benutzte ?? anstelle von has_content & es führt zu so großen Problemen. Ich habe meinen Tag vermasselt. Ich muss das wirklich klären.
Als ich verwendet habe
!(xyz.abc!)?? -- it dint work
Als ich verwendet habe
!(xyz.abc!)?has_content ... it did work
Nicht? ODER has_content ODER if_exists auf dasselbe prüfen?
freemarker
user3606002
quelle
quelle
Antworten:
??
Gibt an, ob der Wert des linken Operanden fehlt (dh es handelt sich um Javanull
oder Sie haben dort eine undefinierte Variable), und gibt entsprechend zurückfalse
(fehlt) odertrue
(fehlt nicht).?has_content
ist sehr ähnlich??
, außer dass es auchfalse
für eine Zeichenfolge mit 0-Länge oder eine leere FTL-Sequenz (wiejava.util.List
, Java-Array usw.) oder einen leeren FTL-Hash (wiejava.util.Map
usw.) zurückgegeben wird. (Es wird nichtfalse
für a0
, booleanfalse
usw. zurückgegeben.)!
wird verwendet, um einen Standardwert anzugeben, wenn ein Wert fehlt (bedeutet wiederum, dass es sich um Java handeltnull
oder Sie eine undefinierte Variable haben), wie zcolor!"no color"
. Wenn Sie die rechte Hand Operanden weglassen!
, dann wird der Standardwert ist eine leere Zeichenfolge und leere Sequenz und leerer Hash auf die gleiche Zeit (ein Multi-typisierten Wert), die für das Schreiben Dinge praktisch ist , wie<#list things! as thing>
,${foo!}
.?if_exists
ist die alte Schreibweise??
. Benutze es nicht.Beachten Sie, dass alle diese Operatoren nur den letzten Schritt eines Punkts oder
[]
Ausdrucks abdecken , z. B.user.price!0
nur Handles, wenn sieprice
fehlenuser
, aber nicht, wenn sieuser
selbst fehlen. Um beide Möglichkeiten abzudecken, verwenden Sie(user.price)!0
, die alle fehlenden variablen Fehler behandelt, die während der Auswertung der ausgelöst werden()
, unabhängig davon, woher sie stammen.quelle
?has_content
ist immer nützlich, außer Wert istBoolean
oderNumber 1/0 for yes/no
<#elseif buyer.company?has_content >
, gibt es eine undefinierte Ausnahme, wie man prüft, ob es einen Käufer gibt. Ich habe alles oben versucht!buyer
fehlen kann, aber wenn es da ist, danncompany
ist es immer da, dann<#elseif buyer??>
, sonst<#elseif (buyer.company)??>
oder<#elseif (buyer.company)?has_content>
. Das()
macht die Existenzhandler-Operatoren so, dass sie den gesamten Ausdruck abdecken.