webentwicklung-frage-antwort-db.com.de

Wie kann man $ {expression} in Freemarker ausgeben, ohne dass es interpretiert wird?

Ich versuche, Freemarker in Verbindung mit jQuery-Vorlagen zu verwenden.

Beide Frameworks verwenden Dollarzeichen/geschweifte Klammern, um Ausdrücke für die Substitution zu identifizieren (oder wie sie im Freemarker "Interpolationen" genannt werden), z. ${person.name}.

Wenn ich also eine jQuery-Vorlage mit Ausdrücken in dieser Syntax definiere, versucht Freemarker, sie zu interpretieren (und schlägt fehl).

Ich habe verschiedene Kombinationen von Escapezeichen für die ${-Sequenz versucht, um sie vergeblich durch Freemarker zu leiten - \${, \$\{, $\{ usw.

Das Einfügen eines Freemarker-Kommentars zwischen dem Dollar und dem Curly (z. B. $<#-- -->{expression}) funktioniert zwar - ich suche jedoch nach einer präziseren und eleganteren Lösung.

Gibt es eine einfachere Möglichkeit, eine Freemarker-Vorlage zur Ausgabe der Zeichenfolge ${ zu erhalten?

26
Glenn Barnett

Dies sollte $ {person.name} drucken:

${r"${person.name}"}
48
javanna

Wenn Sie längere Abschnitte ohne FreeMarker-Markup haben, können Sie <#noparse>...</#noparse> verwenden.

Wenn Sie dieses Problem häufig haben, können Sie FreeMarker seit FreeMarker 2.3.28 so konfigurieren, dass [=exp] anstelle von ${exp} verwendet wird, indem Sie die Konfigurationseinstellung interpolation_syntax auf square_bracket (in der Java-API: Configuration cfg; ... cfg.setInterpolationSyntax(Configuration.SQUARE_BRACKET_INTERPOLATION_SYNTAX)) setzen. Dann ist ${exp} nur statischer Text für FreeMarker. Verwechseln Sie diese Einstellung nicht mit der Einstellung tag_syntax, die auch einen square_bracket-Wert haben kann, die jedoch unabhängig von der Interpolationssyntax ist (Sie können jedoch beide auf square_bracket setzen). Siehe auch: https://freemarker.Apache.org/docs/dgui_misc_alternativesyntax.html

20
ddekany

Eine andere Option ist die Verwendung der Option #include mit der Option parse = false. Fügen Sie Ihre jQuery-Templates in die separate Include-Seite ein und verwenden Sie parse = false, damit der Freemarker es nicht versucht und analysiert.

Dies ist eine gute Option, wenn die Vorlagen größer sind und doppelte Anführungszeichen enthalten. 

4
Rob Bygrave

Wenn ${ Ihr einziges Problem ist, können Sie die alternative Syntax im jQuery Templates-Plugin wie folgt verwenden: {{= person.name}} 

Vielleicht ein bisschen sauberer als zu entkommen.

3
RP Niemeyer

Haben Sie $$ ausprobiert?

Im Freemarker-Handbuch habe ich festgestellt, dass ${r"${person.name}"}${person.name} ausdrucken wird, ohne zu versuchen, es zu rendern.

Vielleicht sollten Sie auch einen Blick auf Freemarker als Freemarker werfen

1
adarshr

Ich musste einige Zeit verbringen, um die folgenden Szenarien herauszufinden, um $ {expression} zu umgehen - 

  • In der Freemarker-Zuordnung:

<#assign var = r "$ {expression}">

  • In HTML-Attribut:

<a href="/user/${r"${expression}"}"> Some link </a>

  • In der Freemarker-Verkettung:

<#assign x = "etwas &" + r "$ {expression}" />

1
Rahul Tiwari

Ich kann das bestätigen 

${r"${item.id}"}

ist der richtige Weg als Beispiel.

Ich werde also ein ganzes Beispiel sehen

<span><a href="/user/user-remove/${r"${item.id}"}"> Remove </a></span>

und die Ausgabe wird sein:

<span><a href="/user/user-remove/${item.id}"> Remove </a></span>
0
JOKe

Wenn Sie nicht-rohe Zeichenfolgen verwenden möchten, um doppelte Anführungszeichen, Apostrophe usw. zu verwenden, können Sie Folgendes tun:

Stellen Sie sich vor, Sie möchten die Zeichenfolge $ {Hello} - "Freund eines Freundes" innerhalb einer Zeichenfolge verwenden. Mit rohen Strings ist das nicht möglich. Was ich verwendet habe, funktioniert:

${"\x0024{Hello}-\"My friend's friend\""}

Ich bin dem Apostroph nicht entgangen, seit ich doppelte Anführungszeichen verwendet habe.

0
Jaime Garza