繁体   English   中英

Apache Velocity:模板中提供哪些变量?

[英]Apache Velocity: Which variables are available in templates?

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

编辑:

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

$ 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/

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

我认为没有覆盖某些速度类的简单方法就可以了。

这是我的一些选择:

  1. 添加所有可能的变量(我假设有一组预定义的变量)。 如果性能过高,请查看缓存。
  2. 在呈现模板之前询问用户他们需要哪些数据(如果是一次性表单,那这些变量是否不变,通常将它们写入db)。
  3. 要求用户在呈现模板之前以模板的某种特定格式提供所需的变量列表,以便于解析,例如: <!--%%__VARS__%%users,latest%%__VARS__%%-->
  4. 使用regexp搜索模板文件并查找$ var实例,这可能很棘手。

如果您不记得它了,我就找到了这支衬板(另存为片段)。

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

希望能帮助到你 ...

哦,删除注释中的##

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM