在freemarker中,是否可以在包含文件之前检查文件是否存在?

har*_*njd 7 freemarker

我们正在尝试在freemarker中构建一个系统,其中可以选择添加扩展文件来替换标准模板的块.

我们已经到了这一步

<#attempt>
    <#include "extension.ftl">
<#recover>
    Standard output
</#attempt>
Run Code Online (Sandbox Code Playgroud)

所以 - 如果extension.ftl文件存在,它将被使用,否则将输出recover块内的部分.

这个问题是freemarker总是记录导致恢复块触发的错误.

所以我们需要两件事之一:

  1. 如果文件不存在,请不要调用include - 因此需要检查文件是否存在.

-要么-

  1. 一种防止在恢复块内记录错误而不更改日志记录以防止出现所有freemarker错误的方法.

小智 -2

尝试以下方法获取基本路径:

<#assign objectConstructor = "freemarker.template.utility.ObjectConstructor"?new()>
<#assign file = objectConstructor("java.io.File","")>
<#assign path = file.getAbsolutePath()>
<script type="text/javascript">
alert("${path?string}");
</script>
Run Code Online (Sandbox Code Playgroud)

然后遍历目录结构:

<#assign objectConstructor = "freemarker.template.utility.ObjectConstructor"?new()>
<#assign file = objectConstructor("java.io.File","target/test.ftl")>
<#assign exist = file.exists()>
<script type="text/javascript">
alert("${exist?string}");
</script>
Run Code Online (Sandbox Code Playgroud)