1

假设我在 pebble 或 freemarker 中有一个模板(我正在考虑使用这两个引擎)。它可能看起来像这样:

<Node>
    <Element attribute="{{ VAR_A }}"/>
    <Element attribute="{{ VAR_F }}"/>
    <Element attribute="{{ VAR_N }}"/>
</Node>

在我的 Java 代码中,我需要提供一个包含这些变量的对象,我相信它可以只是两个引擎中的变量名到对象的映射。

但是要生成数据模型,我需要知道要为哪些变量计算值。我有很多数据。如果不使用它们,我不想计算所有 VAR_A、VAR_B、VAR_C、VAR_D、VAR_E 等。

在执行模板之前,这两个引擎中的一个/两个是否有办法获取所需变量的列表?一种对每个属性值进行惰性求值的方法

编辑:我不知道当我必须评估它时模板会是什么样子,因为它将由用户定义。甚至他们提供的变量也是用户定义的字符串——这就是为什么我需要在提供数据之前获取(和分析)它们。

4

1 回答 1

0

您使用 Freemarker 生成的每种文档都有自己的模板。每个模板都会有一组它使用的变量。在您的 Java 代码中,您提供Map将变量名称映射到值的 a。如果每个模板对应不同的 Java 方法,这些方法可以为该模板设置所需的最小映射。该地图不必是HashMap; 理论上,您可以编写自己的Map接口实现,在其getvalues(等)方法中进行惰性求值。但这几乎可以肯定是麻烦多于其价值。您提供的 map 中的值不必是String对象;Freemarker 会使用toString每个对象的方法,这提供了一种惰性求值。

于 2016-03-22T09:00:37.777 回答