假设我在pebble或freemarker中有一个模板(我考虑使用的两个引擎)。它可能看起来像这样:
<Node>
<Element attribute="{{ VAR_A }}"/>
<Element attribute="{{ VAR_F }}"/>
<Element attribute="{{ VAR_N }}"/>
</Node>
在我的Java代码中,我需要提供一个包含这些变量的对象,我相信这些变量只能是两个引擎中变量name到object的映射。
但是要生成数据模型,我需要知道要为哪些变量计算值。我有很多数据。我不想计算所有VAR_A,VAR_B,VAR_C,VAR_D,VAR_E等,如果它们不会被使用的话。
在执行模板之前,这两个引擎中是否有一种方法可以获取所需变量的列表?一种对每个属性值进行延迟评估的方法
编辑:我不知道模板在我必须评估时会是什么样子,因为它将由用户定义。即使他们提供的变量也是用户定义的字符串 - 这就是我需要在提供数据之前得到(并分析)它们的原因。
答案 0 :(得分:0)
使用Freemarker生成的每种文档都有自己的模板。每个模板都有一个它使用的变量集。在Java代码中,您提供了一个Map
,它将变量名称映射到值。如果您对每个模板使用不同的Java方法,则这些方法可以为该模板设置所需的最小映射。该地图不必是HashMap
;从理论上讲,您可以编写自己的Map
接口实现,在其get
和values
(等)方法中进行延迟评估。但这几乎肯定比它的价值更麻烦。您提供的地图中的值不必是String
个对象; Freemarker将使用每个对象的toString
方法,这提供了一种惰性评估。