Behandlung von Nullwerten in Freemarker


Antworten:


96

Sie können den ??Testoperator verwenden:

Dies prüft, ob das Attribut des Objekts nicht null ist:

<#if object.attribute??></#if>

Dies prüft, ob Objekt oder Attribut nicht null ist:

<#if (object.attribute)??></#if>

Quelle: FreeMarker-Handbuch


1
Was ist der Unterschied zwischen diesem Ansatz und has_content?
Anand B

2
has_contentprüft neben der Nullprüfung auch, ob der Wert nicht leer ist. Dies funktioniert für Zeichenfolgen, Sequenzen, Hashes oder Sammlungen. Wenn das Objekt ein Datum, ein Boolescher Wert oder eine Zahl ist, fungiert es als nicht leer. Bei allen anderen Typen wird es leer angezeigt.
Tom Verelst

Ich habe dieses Problem, bei dem ich überprüfen muss, ob der Wert in bean null ist. Ich habe Folgendes versucht: $ {checknull (Bean.getValue ())}, wo checknull, wenn eine Funktion <#function checknull x> <#if x? ?> <#return ""> <#else> <#return x> </ # if> </ # function>, aber ich erhalte "Fehler beim Ausführen des Makros: checknull erforderlicher Parameter: x ist nicht angegeben." Fehler
Anand B

Sie müssen die Rückgabe umkehren: <#function checknull x> <#if x ??> <#return x> <#else> <#return ""> </ # if> </ # function>
Tom Verelst

1
Bitte überprüfen Sie die folgende Antwort: stackoverflow.com/a/27614219/3002336
Anand Varkey Philips

104

Ab freemarker 2.3.7 können Sie folgende Syntax verwenden :

${(object.attribute)!}

oder, wenn Sie einen Standardtext anzeigen möchten, wenn das Attribut lautet null:

${(object.attribute)!"default text"}

1
Für diejenigen, die Freemarker als Vorlagen-Engine für XDocReport verwenden, funktioniert dies nach dem Hinzufügen <dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.22</version></dependency>zu Ihrer pom.xml.
Ludovic Guillaume

Wie machst du das, wenn du ein Datum hast und das Datum null sein könnte? Mit anderen Worten object.dateAcquired, wobei dateAcquired null sein könnte und Sie $ {object.dateAcquired? Date} haben
Stephane Grenier

1
@StephaneGrenier verwenden${(object.dateAcquired?date)!"not present"}
Tassos Bassoukos

1
Tolles Beispiel. Hat mir viel geholfen. Die Klammer ist jedoch veraltet. ${salutation!'Dear Mr. or Mrs.'}
Sim0rn

Irgendeine Idee, wie ich .now? Long auf Standardwert drucken könnte?
Santiago Aceñolaza

4

Ich denke, es funktioniert andersherum

<#if object.attribute??>
   Do whatever you want....
</#if>

Wenn object.attributeNICHT NULL ist, wird der Inhalt gedruckt.


1

Verwenden Sie den ??Operator am Ende Ihrer <#if>Anweisung.

Dieses Beispiel zeigt, wie nullWerte für zwei Listen in einer Freemaker-Vorlage behandelt werden.

List of cars:
<#if cars??>
    <#list cars as car>${car.owner};</#list>
</#if>
List of motocycles:
<#if motocycles??>
    <#list motocycles as motocycle>${motocycle.owner};</#list>
</#if>

-3

Wenn Sie viele Variablen optional konvertieren müssen, können Sie SubimeText folgendermaßen verwenden:

Find: \${([A-Za-z_0-9]*)}
Replace: \$\{${1}!\}

Stellen Sie sicher, dass die Optionen für Regex und Groß- und Kleinschreibung aktiviert sind:

Erhabener Regex ersetzen

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.