Apache Velocity:テンプレートで使用できる変数はどれですか?

StackOverflow https://stackoverflow.com/questions/1608051

  •  05-07-2019
  •  | 
  •  

質問

テンプレート内の変数のリストを取得し、リストを使用して変数を入力することは可能ですか? ユーザーにテンプレートを作成してもらいたいのですが、どの変数が利用可能になるのか事前にはわかりませんか?

編集:

テンプレートでは、ユーザーが何を印刷するかを決定します。

など

$ users $ latest

しかし、私のアプリケーションからは、テンプレートで使用されている変数がわかりません。ユーザー仕様に従って変数を入力できるように、テンプレート内のすべての変数を含む[users latest]などのリストを取得したいと思います。

役に立ちましたか?

解決

テンプレートをレンダリングし、リストを作成するReferenceInsertionEventHandlerを使用して、リストを収集できる場合があります。問題は、テンプレートに次のようなものがある場合です:

#if( $foo ) $bar #else $woogie #end

イベントハンドラーは、$ barまたは$ woogieのいずれかのみを表示し、両方は表示しません。

このサポートされていない(おそらく古い)クラスが役立つ場合があります:

http://svn.apache。 org / viewvc / velocity / engine / branches / 1.x / experimental / templatetool /

他のヒント

速度クラスのいくつかをオーバーライドすることなく、それを行う簡単な方法はないと思います。

これを行うにはいくつかのオプションがあります:

  1. すべての可能な変数を追加します(私は 定義済みのセットがあると仮定する そのうちの)。パフォーマンスが重い場合 キャッシュを調べます。
  2. テンプレートをレンダリングする前に必要なデータをユーザーに尋ねる 一度だけのフォーム、場合 これらの変数は頻繁に変更されません db)に書き込みます。
  3. 特定の特定の分野で必要な変数のリストを提供するようユーザーに依頼する 前に簡単に解析できるようにテンプレート内でフォーマットする 次のようなテンプレートのレンダリング:<!-%% __ VARS __ %% users、latest %% __ VARS __ %%->
  4. regexpを使用してテンプレートファイルを検索し、$ varインスタンスを探します。 難しいかもしれません。

ここにいくつかの議論とアイデアがありますこれを解決します。優先オプションは、基本的に、テンプレートの生成されたAST用のwalkerを実装することです。些細ではありません。

覚えていない場合は、このライナーを見つけました(スニペットとして保存)。

## #foreach($key in $context.keys) <pre> $key</pre> #end

それが役立つことを願って...

ああ、コメントされている ## を削除します

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top