Behandlung von Nullwerten in Freemarker

80

Wie nullgehe ich mit Werten in Freemarker um? Ich erhalte einige Ausnahmen in der Vorlage, wenn nullWerte in Daten vorhanden sind.

Anand B.
quelle
Mögliche Duplizieren: stackoverflow.com/questions/306732/...
Aufsätze

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

Tom Verelst
quelle
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"}
Arnaud
quelle
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.

Senthil Kumar Sekar
quelle
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>
Daniel Perník
quelle
-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

Juan Ignacio Barisich
quelle