Apache Velocity:模板中有哪些变量?

时间:2009-10-22 15:30:43

标签: java velocity

是否可以在模板中获取变量列表并使用列表填充它们? 我希望我的用户创建他们的模板,这意味着我不会事先知道哪些变量可用?

编辑:

在我的模板中,用户将决定打印的内容。如

$用户 $ latest

但是从我的应用程序中我不知道模板中使用了哪些变量。我希望获得一个列表,例如[users latest],其中包含模板中的所有变量,以便我可以根据用户规范填写它们。

4 个答案:

答案 0 :(得分:1)

您可以通过呈现模板并使用构建列表的ReferenceInsertionEventHandler来收集列表。但问题是模板是否包含以下内容:

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

您的事件处理程序只会看到$ bar或$ woogie,而不是两者。

这个不受支持(可能过时)的课程可能有所帮助:

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

答案 1 :(得分:0)

我认为在不覆盖某些速度等级的情况下,有一种简单的方法可以做到这一点。

以下是我将如何做的一些选项:

  1. 添加所有可能的变量(我是 假设有一个预定义的集合 他们)。如果它性能很重 看看缓存。
  2. 在呈现模板之前询问用户他们需要哪些数据(如果是的话) 一次只是一种形式,如果 那些变量不经常改变 把它们写进db)。
  3. 要求用户提供他们需要的变量列表 模板内部的格式,以便以前轻松解析 渲染模板,例如:<!--%%__VARS__%%users,latest%%__VARS__%%-->
  4. 使用regexp搜索模板文件并查找$ var实例, 这可能很棘手。

答案 2 :(得分:0)

Here有一些讨论和想法可以解决这个问题。首选选项基本上是为生成的模板AST实现walker。不是微不足道的。

答案 3 :(得分:0)

如果你不记得它,我发现这个衬垫(保存为片段)。

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

希望它有所帮助...

哦,删除评论时的##