Wie überprüfe ich, ob eine Variable in einer FreeMarker-Vorlage vorhanden ist?

Lesezeit: 4 Minuten

Benutzer-Avatar
Donal

Ich habe eine Freemarker-Vorlage, die eine Reihe von Platzhaltern enthält, für die Werte bereitgestellt werden, wenn die Vorlage verarbeitet wird. Ich möchte einen Teil der Vorlage bedingt einschließen, wenn die userName-Variable bereitgestellt wird, etwa so:

[#if_exists userName]
  Hi ${userName}, How are you?
[/#if_exists]

Das FreeMarker-Handbuch scheint jedoch darauf hinzuweisen, dass if_exists veraltet ist, aber ich kann keinen anderen Weg finden, dies zu erreichen. Natürlich könnte ich einfach eine zusätzliche boolesche Variable isUserName bereitstellen und diese so verwenden:

[#if isUserName]
  Hi ${userName}, How are you?
[/#if]

Aber wenn es eine Möglichkeit gibt, zu überprüfen, ob userName existiert, kann ich das Hinzufügen dieser zusätzlichen Variablen vermeiden.

Benutzer-Avatar
Ulf Lindback

So überprüfen Sie, ob der Wert vorhanden ist:

[#if userName??]
   Hi ${userName}, How are you?
[/#if]

Oder mit der Standard-Freemarker-Syntax:

<#if userName??>
   Hi ${userName}, How are you?
</#if>

So überprüfen Sie, ob der Wert vorhanden und nicht leer ist:

<#if userName?has_content>
    Hi ${userName}, How are you?
</#if>

  • Falls jemand anderes davon abgeschreckt wurde, sollte die #if-Syntax von Kleiner-als- und Größer-als-Zeichen anstatt von Klammern umgeben sein. zum Beispiel: <#if Benutzername??>

    – Kamerun

    17. März 2010 um 18:23 Uhr


  • Es ist tatsächlich möglich, diese Syntax zu verwenden, also habe ich mich einfach an die Syntax der Frage gehalten: siehe freemarker.sourceforge.net/docs/…

    – Ulf Lindback

    18. März 2010 um 7:52 Uhr

  • Dies prüft nur, ob die var existiert. Aber wenn Sie einen leeren String in “userName” haben, wird <#if userName??> true zurückgeben !! Siehe die Antwort von @ user1546081 auf dieser Seite, um dieses Problem zu beheben.

    – Adrien Be

    15. Januar 2013 um 10:22 Uhr

  • Hallo, gibt es eine Möglichkeit, ${userName!?size} ohne “if”-Anweisung auszuführen? Und ${user!.userName!?size}

    – Hallo Welt

    3. Februar 2021 um 20:13 Uhr

Dieser hier scheint besser geeignet zu sein:

<#if userName?has_content>
... do something
</#if>

http://freemarker.sourceforge.net/docs/ref_builtins_expert.html

  • Scheint zu prüfen, ob die var existiert UND ob ihr Inhalt nicht null oder leer ist (bezieht sich hier auf leere Strings).

    – Adrien Be

    15. Januar 2013 um 10:18 Uhr

  • Muss dies ablehnen, da es technisch falsch ist und zu unbeabsichtigtem (falsch negativem) Verhalten führt, wenn die Variable existiert (was op überprüfen wollte), aber leer ist.

    – Madbreaks

    11. März 2014 um 17:01 Uhr

Benutzer-Avatar
Ulf Lindback

Auch denke ich wenn_existiert wurde verwendet wie:

Hi ${userName?if_exists}, How are you?

was nicht bricht, wenn userName null ist, wäre das Ergebnis bei null:

Hi , How are you?

if_exists ist jetzt veraltet und wurde durch den Standardoperator ersetzt! wie in

Hi ${userName!}, How are you?

Der Standardoperator unterstützt auch einen Standardwert, wie zum Beispiel:

Hi ${userName!"John Doe"}, How are you?

  • Der Standardwertoperator kann nicht zur Auswertung als boolescher Wert verwendet werden. Als solches kann es nicht in einem verwendet werden if Aussage wie gewünscht.

    – Madbreaks

    11. März 2014 um 17:03 Uhr

  • Hallo, gibt es eine Möglichkeit, ${userName!?size} ohne “if”-Anweisung auszuführen? Und ${user!.userName!?size}

    – Hallo Welt

    3. Februar 2021 um 20:13 Uhr

Benutzer-Avatar
Jake Toronto

Ich denke, viele Leute möchten überprüfen können, ob ihre Variable nicht leer ist und ob sie existiert. Ich denke, dass die Überprüfung auf Existenz und Leerheit in vielen Fällen eine gute Idee ist und Ihre Vorlage robuster und weniger anfällig für dumme Fehler macht. Mit anderen Worten, wenn Sie überprüfen, ob Ihre Variable nicht null UND nicht leer ist, bevor Sie sie verwenden, wird Ihre Vorlage flexibler, da Sie entweder eine null-Variable oder eine leere Zeichenfolge hineinwerfen können, und es funktioniert genauso in beiden Fällen.

<#if p?? && p?has_content>1</#if>

Angenommen, Sie möchten das sicherstellen p ist mehr als nur Leerzeichen. Dann könnten Sie es zuschneiden, bevor Sie überprüfen, ob es funktioniert has_content.

<#if p?? && p?trim?has_content>1</#if>

AKTUALISIEREN

Bitte ignorieren Sie meinen Vorschlag – has_content ist alles, was benötigt wird, da es zusammen mit der Leerprüfung eine Nullprüfung durchführt. Tun p?? && p?has_content ist äquivalent zu p?has_contentalso kannst du auch einfach verwenden has_content.

Für Versionen vor FreeMarker 2.3.7

Sie können nicht verwenden ?? Um mit fehlenden Werten umzugehen, lautet die alte Syntax:

<#if userName?exists>
   Hi ${userName}, How are you?
</#if>

1352760cookie-checkWie überprüfe ich, ob eine Variable in einer FreeMarker-Vorlage vorhanden ist?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy