5

Velocity テンプレート (.vm ファイル) で、に存在するすべての変数または属性をループするにはどうすればよいVelocityContextですか? 以下のコードを参照して、コンテキストで渡されたすべての果物の名前と数をテンプレートに書き込みたいと思います。

Map<String, Object> attribues = ...;
attribues.put("apple", "5");
attribues.put("banana", "2");
attribues.put("orange", "3");

VelocityContext velocityContext = new VelocityContext(attribues);
velocityEngine.mergeTemplate(templateLocation, encoding, velocityContext, writer);
4

2 に答える 2

5

デフォルトでは、コンテキスト オブジェクトを取得できないため、これを行うことはできません。ただし、コンテキスト自体をコンテキストに入れることはできます。

ジャワ:

attributes.put("vcontext", attributes);

.vm:

#foreach ($entry in $vcontext.entrySet())
  $entry.key => $entry.value
#end

マップを変更するコードを実行しながらライブ コンテキストを読み取っているため、例外が発生します。したがって、最初にマップのコピーを作成することをお勧めします。

#set ($vcontextCopy = {})
$!vcontextCopy.putAll($vcontext)
#foreach ($entry in $vcontextCopy.entrySet())
  ## Prevent infinite recursion, don't print the whole context again
  #if ($entry.key != 'vcontext' && $entry.key != 'vcontextCopy')
    $entry.key => $entry.value
  #end
#end
于 2013-06-08T01:23:34.630 に答える