2

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

编辑:

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

$用户 $最新

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

4

4 回答 4

1

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

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

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

这个不受支持的(可能是过时的)类可能会有所帮助:

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

于 2009-10-23T01:17:37.540 回答
0

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

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

  1. 添加所有可能的变量(我假设有一组预定义的变量)。如果性能很重,请查看缓存。
  2. 在渲染模板之前询问用户他们需要哪些数据(如果它是一次性的东西只是一个表单,如果这些变量不改变经常将它们写入数据库)。
  3. 要求用户在模板中以某种特定格式提供他们需要的变量列表,以便在渲染模板之前轻松解析,例如:<!--%%__VARS__%%users,latest%%__VARS__%%-->
  4. 使用正则表达式搜索模板文件并查找 $var 实例,这可能很棘手。
于 2009-10-22T19:28:18.237 回答
0

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

于 2012-09-25T13:59:31.473 回答
0

如果您不记得的话,我找到了这个衬里(将其保存为片段)。

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

希望能帮助到你 ...

哦,删除##评论

于 2013-05-01T11:05:54.757 回答