簡體   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