如何在FTL中包含外部FTL

时间:2017-08-28 17:59:07

标签: freemarker

我使用< #include>将外部静态FTL文件(从存储库)包含到我的项目FTL中指令如下。但我无法插入此FTL。有人可以指导我如何包含外部URL。

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

错误:java.io.FileNotFoundException:Template&#34; http:// {domain} /file.ftl"未找到。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

想象有 1个父母 2个孩子

可能需要处理的情况:

  • 通过父级->子级
  • 传递参​​数
  • 通过第一个孩子->父母->第二个孩子
  • 传递参​​数

我的回答涵盖了两个方面: 在父级中,我们导入两个子级,并创建一个名为“ 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>

第一个孩子,我们将其定义为面包屑,并放置在 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>

第二个孩子是

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

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

结论:第一个孩子将面包屑添加到源页面,第二个孩子将剩余的面包屑推到路径

结果是:

enter image description here