FreemarkerをjQueryテンプレートと組み合わせて使用しようとしています。
両方のフレームワークは、ドル記号/中括弧を使用して、置換の式を識別します(または、フリーマーカーで「補間」と呼ばれるように)。 ${person.name}
。
そのため、その構文の式でjQueryテンプレートを定義すると、Freemarkerはそれらを解釈しようとします(失敗します)。
${
シーケンスをエスケープして、Freemarkerを介して渡さないようにするさまざまな組み合わせを試しました-\${
、\$\{
、$\{
など。
ドルとカーリーの間にフリーマーカーコメントを挿入すると(例:$<#-- -->{expression}
)機能しますが、もっと簡潔でエレガントな解決策を探しています。
Freemarkerテンプレートを取得して文字シーケンス${
を出力する簡単な方法はありますか?
これは$ {person.name}を出力するはずです:
${r"${person.name}"}
FreeMarkerマークアップのない長いセクションの場合は、<#noparse>...</#noparse>
を使用します。
FreeMarker 2.3.28から、[=exp]
構成オプションを${exp}
に設定して、中括弧構文(interpolation_syntax
)ではなく角括弧構文(square_bracket
)を使用するようにFreeMarkerを構成します。
タグ構文とは異なり、補間構文はテンプレート内で指定できないことに注意してください。補間構文の変更呼び出しが必要 Java API:
Configuration cfg;
// ...
cfg.setInterpolationSyntax(SQUARE_BRACKET_INTERPOLATION_SYNTAX);
その後、FreeMarkerは${exp}
を静的テキストと見なします。
補間構文とタグ構文を混同しないでください。タグ構文も
square_bracket
値を持つことができますが、補間構文とは無関係です。
FreeMarkerベースのファイルPreProcessor (FMPP)を使用する場合は、config.fmpp
またはコマンドラインで次のように設定します。
fmpp --verbose --interpolation-syntax squareBracket ...
これにより、ファイルを処理する前に適切なJava APIが呼び出されます。
以下も参照してください。
別のオプションは、parse = falseオプションで#includeを使用することです。つまり、jQueryテンプレートを別のインクルードページに配置し、parse = falseを使用して、freemarkerがそれを解析しないようにします。
これは、テンプレートが大きく、二重引用符が含まれている場合に適しています。
${
が唯一の問題です。jQueryテンプレートプラグインで次のような代替構文を使用できます。{{= person.name}}
多分それをエスケープするより少しきれいです。
試しましたか $$
?
Freemarkerのマニュアルから${r"${person.name}"}
は出力します${person.name}
レンダリングを試みません。
たぶん、あなたは Freemarker escaping freemarker も見ておくべきでしょう。
$ {expression}をエスケープするために、次のシナリオを理解するために少し時間を費やす必要がありました-
<#assign var = r "$ {expression}">
<a href="/user/${r"${expression}"}"> Some link </a>
<#assign x = "something&" + r "$ {expression}" />
確認できます
${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>
未処理の文字列を使用して二重引用符、アポストロフィなどをエスケープできるようにする場合は、次のようにします。
文字列内で文字列$ {Hello}-"My friend's friend"を使用したいとします。生の文字列ではそれを行うことはできません。私が使用したものはうまくいきます:
${"\x0024{Hello}-\"My friend's friend\""}
二重引用符を使用して以来、アポストロフィをエスケープしていません。