web-dev-qa-db-ja.com

$ {expression}を解釈せずにFreemarkerに出力する方法は?

FreemarkerをjQueryテンプレートと組み合わせて使用​​しようとしています。

両方のフレームワークは、ドル記号/中括弧を使用して、置換の式を識別します(または、フリーマーカーで「補間」と呼ばれるように)。 ${person.name}

そのため、その構文の式でjQueryテンプレートを定義すると、Freemarkerはそれらを解釈しようとします(失敗します)。

${シーケンスをエスケープして、Freemarkerを介して渡さないようにするさまざまな組み合わせを試しました-\${\$\{$\{など。

ドルとカーリーの間にフリーマーカーコメントを挿入すると(例:$<#-- -->{expression})機能しますが、もっと簡潔でエレガントな解決策を探しています。

Freemarkerテンプレートを取得して文字シーケンス${を出力する簡単な方法はありますか?

30
Glenn Barnett

これは$ {person.name}を出力するはずです:

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

FreeMarkerマークアップのない長いセクションの場合は、<#noparse>...</#noparse>を使用します。

FreeMarker 2.3.28から、[=exp]構成オプションを${exp}に設定して、中括弧構文(interpolation_syntax)ではなく角括弧構文(square_bracket)を使用するようにFreeMarkerを構成します。

タグ構文とは異なり、補間構文はテンプレート内で指定できないことに注意してください。補間構文の変更呼び出しが必要 Java AP​​I:

Configuration cfg;
// ...
cfg.setInterpolationSyntax(SQUARE_BRACKET_INTERPOLATION_SYNTAX);

その後、FreeMarkerは${exp}を静的テキストと見なします。

補間構文とタグ構文を混同しないでください。タグ構文もsquare_bracket値を持つことができますが、補間構文とは無関係です。

FreeMarkerベースのファイルPreProcessor (FMPP)を使用する場合は、config.fmppまたはコマンドラインで次のように設定します。

fmpp --verbose --interpolation-syntax squareBracket ...

これにより、ファイルを処理する前に適切なJava AP​​Iが呼び出されます。

以下も参照してください。

23
ddekany

別のオプションは、parse = falseオプションで#includeを使用することです。つまり、jQueryテンプレートを別のインクルードページに配置し、parse = falseを使用して、freemarkerがそれを解析しないようにします。

これは、テンプレートが大きく、二重引用符が含まれている場合に適しています。

4
Rob Bygrave

${が唯一の問題です。jQueryテンプレートプラグインで次のような代替構文を使用できます。{{= person.name}}

多分それをエスケープするより少しきれいです。

3
RP Niemeyer

試しましたか $$

Freemarkerのマニュアルから${r"${person.name}"}は出力します${person.name}レンダリングを試みません。

たぶん、あなたは Freemarker escaping freemarker も見ておくべきでしょう。

1
adarshr

$ {expression}をエスケープするために、次のシナリオを理解するために少し時間を費やす必要がありました-

  • Freemarker割り当て:

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

  • HTML属性内:

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

  • Freemarker連結では:

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

1
Rahul Tiwari

確認できます

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

例として正しい方法です。

だから私はちょっと完全な例は次のようになります

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

出力は次のようになります。

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

未処理の文字列を使用して二重引用符、アポストロフィなどをエスケープできるようにする場合は、次のようにします。

文字列内で文字列$ {Hello}-"My friend's friend"を使用したいとします。生の文字列ではそれを行うことはできません。私が使用したものはうまくいきます:

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

二重引用符を使用して以来、アポストロフィをエスケープしていません。

0
Jaime Garza