如何在 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"。
每次需要加载模板时(对于 #include
或 Configuration.getTemplate
等),FreeMarker 调用 Configuration
的 TemplateLoader
来执行此操作(除非模板已经在缓存中)。由 TemplateLoader
来解释地址并实际加载模板。没有包含从 http:
地址加载的 TemplateLoader
,因此您需要创建一个自定义 TemplateLoader
实现来执行此操作。然后将 templateLoader
配置设置设置为它。
假设有 1 Parent 和 2 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 将其余面包屑推入路径
结果我们得到:
我使用 <#include> 指令将外部静态 FTL 文件(来自存储库)包含到我的项目 FTL 中,如下所示。但是我无法插入这个 FTL。谁能指导我如何包含外部 URL。
<#include "http://{domain}/file.ftl" />
错误:java.io.FileNotFoundException:找不到模板 "http://{domain}/file.ftl"。
每次需要加载模板时(对于 #include
或 Configuration.getTemplate
等),FreeMarker 调用 Configuration
的 TemplateLoader
来执行此操作(除非模板已经在缓存中)。由 TemplateLoader
来解释地址并实际加载模板。没有包含从 http:
地址加载的 TemplateLoader
,因此您需要创建一个自定义 TemplateLoader
实现来执行此操作。然后将 templateLoader
配置设置设置为它。
假设有 1 Parent 和 2 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 将其余面包屑推入路径
结果我们得到: