如何在 FTL 中包含外部 FTL

How to include external FTL inside a FTL

我使用 <#include> 指令将外部静态 FTL 文件(来自存储库)包含到我的项目 FTL 中,如下所示。但是我无法插入这个 FTL。谁能指导我如何包含外部 URL。

<#include "http://{domain}/file.ftl" />

错误:java.io.FileNotFoundException:找不到模板 "http://{domain}/file.ftl"。

每次需要加载模板时(对于 #includeConfiguration.getTemplate 等),FreeMarker 调用 ConfigurationTemplateLoader 来执行此操作(除非模板已经在缓存中)。由 TemplateLoader 来解释地址并实际加载模板。没有包含从 http: 地址加载的 TemplateLoader,因此您需要创建一个自定义 TemplateLoader 实现来执行此操作。然后将 templateLoader 配置设置设置为它。

假设有 1 Parent2 Children;

可能处理的案例:

  • Parent 传递参数 -> Child
  • 第一个 Child -> Parent -> 第二个 Child
  • 传递参数

我的回答涵盖了两者: 在 Parent 中,我们导入两个 child 并创建一个存储变量调用 'Path':

<#import "breadcrumbs.ftl" as breadcrumbs>

<#macro breadCrumbs path=[]>
    <@breadcrumbs.breadcrumbs path=path/>
</#macro>

<#macro wrap>
    <!doctype html>
    <html lang="en">
        <div id="breadcrumbs">
    </html>
</#macro>

第一个 child 我们定义为面包屑,它位于 div#breadcrumbs

<#macro breadcrumbs path=[]>
    <#assign totalpath=["{'name': 'Home', 'url': '${appContext}/'}"] + path/>

    <script type="module">
        import {BreadCrumbs} from "${appContext}/_app/jsx/breadcrumbs.js";

        new BreadCrumbs({
            "containerID": "breadcrumbs",
            "path": [<#list totalpath as p>${p}, </#list>],
        });
    </script>
</#macro>

第二个 child 是

<#import "./admin-layout.ftl" as layout>

<@layout.wrap>
    <@layout.breadCrumbs path = ["{'name': 'Models', 'url':'${appContext}/admin/model'}"]/>
    <div>some other comntent</div>
</@layout.wrap>

结论:第一个 child 将源页面添加到面包屑,第二个 child 将其余面包屑推入路径

结果我们得到: