35

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

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

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

${シーケンスをエスケープしてFreemarkerを通過させて無駄にする\${さまざまな組み合わせを試しましたが\$\{、、、$\{などです。

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

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

4

8 に答える 8

66

これにより、${person.name} が出力されます。

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

フリーマーカーのドキュメントから

特別な種類の文字列リテラルは、生の文字列リテラルです。生の文字列リテラルでは、バックスラッシュと ${ に特別な意味はなく、プレーンな文字と見なされます。文字列リテラルが生の文字列リテラルであることを示すには、開始引用符またはアポストロフィ引用符の直前に r を付ける必要があります

于 2011-03-05T23:58:42.267 に答える
25

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

FreeMarker 2.3.28 以降では、構成オプションを に設定して、[=exp]中かっこ構文 ( ) の代わりに角かっこ構文 ( )を使用するように FreeMarker を構成します。${exp}interpolation_syntaxsquare_bracket

タグ構文とは異なり、補間構文はテンプレート内で指定できないことに注意してください。補間構文を変更するには、Java APIを呼び出す必要があります。

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

次に、FreeMarker は${exp}静的テキストであると見なします。

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

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

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

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

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

于 2011-08-05T07:54:29.350 に答える
4

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

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

于 2011-08-01T12:23:08.173 に答える
3

が唯一の問題である場合${は、次のように jQuery Templates プラグインで代替構文を使用できます。 {{= person.name}}

エスケープするよりも少しきれいかもしれません。

于 2011-03-06T02:03:45.130 に答える
3

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

  • Freemarker の割り当て:

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

  • html 属性:

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

  • Freemarker 連結では:

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

于 2018-12-14T18:18:18.733 に答える
2

試しました$$か?

Freemarker のマニュアルから、レンダリングを試みず${r"${person.name}"}に印刷できるものを見つけました。${person.name}

おそらく、Freemarker escaping freemarkerもご覧ください。

于 2011-03-05T23:56:47.203 に答える
1

私はそれを確認することができます

${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>
于 2015-11-03T09:52:31.133 に答える
0

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

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

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

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

于 2014-01-15T19:49:33.870 に答える