【问题标题】:How to get all model parameters from Freemarker parser tree?如何从 Freemarker 解析器树中获取所有模型参数?
【发布时间】:2022-01-21 09:08:42
【问题描述】:

案例: 当我在我的系统中应用 FTL 模板时,我想从模板中解析所有模型参数?这样用户就可以知道传递这些参数而不是阅读整个模板。

例如:

SELECT
    platform
FROM
(
<#list tableList as table>
    SELECT
            __time,
            platform
    FROM
    ${table}
    <#if table_has_next>UNION ALL</#if>
</#list>
)
WHERE
__time BETWEEN TIMESTAMP '${startTime}' AND '${endTime}'
GROUP BY
    1

调用方法后可以输出格式:

{
   "startTime" : "",
   "endTime": "",
   "tableList": null
}

我在 Freemaker 内核中尝试了 JavaCC 生成的 rootElement,但它不公开,并抛出错误。

有人可以帮帮我吗?

【问题讨论】:

  • 与问题无关,但你可以写&lt;#sep&gt;UNION ALL,而不是&lt;#if table_has_next&gt;UNION ALL&lt;/#if&gt;。 (即使table_has_next 是遗留的,首选是table?has_next。)

标签: java freemarker


【解决方案1】:

没有这样的功能。

一般来说,通过静态分析无法判断需要哪些变量。模板语言太动态了。就像您在某处看到变量 x 的读数一样,并且模板中的某处也有 &lt;#assign x = ...&gt;。现在您需要能够证明它总是在读取x 之前执行,否则必须在模板执行之前设置x。然后还有#include-s、全局变量等

【讨论】:

    猜你喜欢
    • 2011-04-11
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2018-06-16
    • 2015-10-16
    • 1970-01-01
    • 2022-06-24
    相关资源
    最近更新 更多